簡體   English   中英

always_populate_raw_post_data-無法訪問從主干創建的請求有效負載

[英]always_populate_raw_post_data - Trouble accessing request payload from Backbone create

我正在嘗試在服務器上運行SLIM php框架的情況下,使用Backbone.js RESTful地將集合保存到數據庫中。

這是我的收藏:

var newUser = this.collection.create(
    formData,
    {
        wait: true,
        success: $.proxy(function() {
            this.collection.currentUser = newUser;
            App.Router.navigate('', { trigger: true });
        }, this)
    }
);

這是我的SLIM路線:

$api->post('/users', function() use($api, $db) {

    $request = $api->request()->post();

    $api->response()->header('Content-Type', 'application/json');

    $result = $db->users()->insert($user);

    if( $result ) {
        echo json_encode(array(
            'id' => $result['id']
        ));
    }
    else {
        echo json_encode(array(
            'status' => false,
            'message' => 'error_creating_user'
        ));
    }

});

$api->run();

在集合上調用create()時,服務器響應中將出現棄用警告:

Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version. To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream instead. in Unknown on line 0

我已按照這些說明進行了以下操作:

我在路線之前添加了以下內容:

ini_set('always_populate_raw_post_data', '-1');

從我的POST路由中,我試圖接收請求有效負載,如下所示:

$request = file_get_contents('php://input');

更改我的代碼后,得到的響應保持不變...

編輯

即使回調為空,也會發生錯誤。

$api->post('/users', function() use($api, $db) {

    // nothing

});

PHP 5.6中有一個錯誤。 always_populate_raw_post_data默認值為0 即使您的代碼不使用$HTTP_RAW_POST_DATA這也會導致PHP引發警告。 有人聲稱在某些文本已經輸出后調用header()時會發生這種情況。 嘗試使用ini_set()沒有幫助。

您必須改為直接在php.ini中更改配置。

always_populate_raw_post_data = -1

PHP內部的相關討論

基本上,您可以解決Automatically populating $HTTP_RAW_POST_DATA is deprecated...錯誤Automatically populating $HTTP_RAW_POST_DATA is deprecated...有幾種方式,

  1. PHP設置

將always_populate_raw_post_data更改為-1 php.ini文件將解決此問題。 但是,如果您對php.ini文件沒有足夠的控制,則會成為問題。 您可以想到共享托管。

  1. 預約設置

將.htaccess文件更改為您的應用程序目錄。 這將僅對您的應用程序提供隔離的控制。 它不會影響其他應用程序執行的APACHE或PHP。

<IfModule mod_php5.c> php_value always_populate_raw_post_data -1 </IfModule>

我建議第二種方法。 因為它允許您將應用程序放置在共享托管和專用服務器托管中。

您可以通過Slim的請求對象請求POST數據。

$api->post('/users', function() use ($api) {
    var_dump($api->request()->post());
    var_dump($api->request()->post('specificKey'));
});

這是文檔: http : //docs.slimframework.com/#Request-Variables

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM