всегда заполняйте необработанные данные записи - Проблемы с доступом к полезной нагрузке запроса от магистрального создания


Я пытаюсь сохранить коллекцию в своей базе данных, используя Backbone.js с помощью ТОНКОЙ php-платформы, работающей на моем сервере.

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

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

Вот мой ТОНКИЙ маршрут:

$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');

И от в рамках моего почтового маршрута я попытался получить полезную нагрузку запроса следующим образом:

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

После этого изменения в моем коде ответ, который я получаю, остался прежним...

РЕДАКТИРОВАТЬ

Ошибка возникает даже при пустом обратном вызове....

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

    // nothing

});
Author: loxyboi, 2015-02-02

3 answers

В 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.

 22
Author: Mika Tuupola, 2015-02-03 05:07:45

В принципе, вы можете устранить ошибку 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
Author: HILARUDEEN ALLAUDEEN, 2016-07-15 08:49:49

Вы можете запросить данные 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
Author: Tuim, 2015-02-02 13:34:17