Как получить тело поста в php?



Я отправляю как сообщение на страницу php следующее:



{a:1}


это тело запроса (запрос POST).

В PHP, что мне нужно сделать, чтобы извлечь это значение?



var_dump($_POST); 


это не решение, не работает.

856   5  

5 ответов:

чтобы получить доступ к телу сущности запроса POST или PUT (или любого другого метода HTTP):

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

и STDIN константа-это уже открытый поток в php://input, так что вы можете сделать:

$entityBody = stream_get_contents(STDIN);

С PHP ручной ввод в потоках ввода/вывода docs:

php: / / input это поток только для чтения, который позволяет читать необработанные данные из тела запроса. В случае POST-запросов, желательно использовать php: / / input вместо $HTTP_RAW_POST_DATA как это не зависит от специального php.ini-директивы. Кроме того, для тех случаев, когда $HTTP_RAW_POST_DATA не заполняется по умолчанию, это потенциально менее интенсивная альтернатива активации памяти always_populate_raw_post_data. php: / / input не доступно с enctype= "multipart / form-data".

в частности, вы хотите отметить, что php://input поток, независимо от того, как вы получаете доступ к нему в веб-SAPI,не ищется. Это означает, что его можно прочитать только один раз. Если вы работаете в среде, где обычно загружаются большие тела сущностей HTTP, вы можете сохранить входные данные в виде потока (а не буферизировать его, как в первом примере выше).

для поддержания потока ресурсов что-то вроде этого может быть полезно:

<?php

function detectRequestBody() {
    $rawInput = fopen('php://input', 'r');
    $tempStream = fopen('php://temp', 'r+');
    stream_copy_to_stream($rawInput, $tempStream);
    rewind($tempStream);

    return $tempStream;
}

php://temp позволяет управлять потреблением памяти, потому что он будет прозрачно переключаться на хранение файловой системы после хранения определенного количества данных (2M по умолчанию). Этим размером можно манипулировать в php.ini-файл или путем добавления /maxmemory:NN, где NN - максимальный объем данных, который необходимо хранить в памяти перед использованием временного файла, в байтах.

конечно, если у вас есть действительно хорошая причина для поиска во входном потоке, вам не нужна эта функциональность в веб-приложения. Чтение тела сущности HTTP-запроса один раз обычно достаточно -- не заставляйте клиентов ждать весь день, пока ваше приложение выясняет, что делать.

обратите внимание, что php: / / input недоступен для запросов, указывающих a (enctype="multipart/form-data" в HTML-формах). Это приводит к тому, что PHP уже проанализировал данные формы в $_POST суперглобальная.

возможная причина для пустого $_POST разве что запрос не POST или не

Если вы установили расширение HTTP PECL, вы можете использовать http_get_request_body() функция для получения данных тела в виде строки.

Если у вас pecl / http расширение установлено, вы также можете использовать это:

$request = new http\Env\Request();
$request->getBody();

Comments

    Ничего не найдено.