always_populate_raw_post_data — проблема с доступом к полезной нагрузке запроса из Backbone create

Я пытаюсь сохранить коллекцию в моей базе данных RESTful с помощью Backbone.js с PHP SL Framework работает на моем сервере.

Вот моя коллекция:

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

});

7

Решение

В PHP 5.6 есть ошибка. Значение по умолчанию always_populate_raw_post_dataявляется 0, Это заставляет PHP выдавать предупреждения, даже если ваш код не использует $HTTP_RAW_POST_DATA, Некоторые утверждают, что это происходит при звонке header() после того, как какой-то текст уже был выведен. Пытаясь использовать ini_set()не помогает.

Вместо этого вы должны изменить конфигурацию непосредственно в php.ini.

always_populate_raw_post_data = -1

связанные с обсуждение во внутренностях PHP.

24

Другие решения

В основном вы можете решить Automatically populating $HTTP_RAW_POST_DATA is deprecated... ошибка в двух отношениях,

  1. Настройки PHP

Изменение файла always_populate_raw_post_data на -1 php.ini решит проблему. Однако это становится проблемой, когда у вас недостаточно контроля над файлом php.ini. Вы можете думать о виртуальном хостинге.

  1. APACHE НАСТРОЙКИ

Изменение файла .htaccess внутри вашего каталога приложений. Это даст изолированный контроль только над вашей заявкой. Это не повлияет ни на APACHE, ни на PHP выполнения других приложений.

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

И я бы порекомендовал второй подход. Так как он позволяет разместить ваше приложение как на виртуальном хостинге, так и на выделенном хостинге

2

Вы можете запросить данные POST через объект запроса, поступающий из Slim.

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

Вот документация: http://docs.slimframework.com/#Request-Variables

0