хранение содержимого php: // input в переменной - PullRequest
4 голосов
/ 10 февраля 2012

Я пытаюсь отредактировать и настроить чужой REST-сервер на PHP. Он основан на REST-сервере , написанном Филом Стердженом. В общем-то, я все обдумал, но мои запросы не работают должным образом.

В конструкторе сервера есть код

switch ($this->request->method)
{
    case 'post':
    $this->_post_args = $_POST;
    $this->request->format and $this->request->body = 
                                    file_get_contents('php://input');
    break;
}

Я знаю, что php://input может быть прочитан только один раз, поэтому var_dump(file_get_contents('php://input')) перед установкой переменных показывает, что мои данные XML правильно считываются из входного потока, но, очевидно, переменные установлены неправильно.

Но при var_dump($this->request->body) выводит только NULL! Есть ли специальная техника для хранения содержимого php://input в переменной?

EDIT:

Я использую API Kitchen для отправки запроса POST и заголовки, которые он отправляет

Status: 200
X-Powered-By: PHP/5.3.2-1ubuntu4.11
Server: Apache/2.2.14 (Ubuntu)
Content-Type: application/xml
Date: Fri, 10 Feb 2012 11:00:43 GMT
Keep-Alive: timeout=15, max=100
Content-Length: 936
Connection: Keep-Alive

Из этого не видно, что такое кодировка.

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

Кодировка application/x-www-form-urlencoded, в которой может быть проблема !! Как мне конкретно сказать, что это должно быть?

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

$this->request->method содержит 'post'

Ответы [ 2 ]

4 голосов
/ 10 февраля 2012

Спасибо за помощь, оказывается, что для работы тип содержимого запроса должен быть application / xml, а не application / x-www-form-urlencoded, как это было.

1 голос
/ 10 февраля 2012

если $this->request->format равно false или NULL или 0, более поздняя часть оператора and не выполняется.

  $this->request->format and $this->request->body = file_get_contents('php://input');
                             ^
                             |
                             +--- this part wont execute

Вы должны были написать это как

if($this->request->format){
    $this->request->body = file_get_contents('php://input');
}

Это помогает при отладке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...