Документация PHP указывает, что php://input
может быть прочитан только один раз.
В моем приложении мне нужно прочитать его дважды, один раз для целей аутентификации и один раз для фактической обработки содержимого, а обе функции обрабатываются разными независимыми модулями. Сумасшедшая вещь: работает.
Могу ли я рассчитывать на эту работу повсюду, или это случайность в моей версии PHP (5.2.10)? Единственная документация, которую я могу найти об этом, - это та, которая заявляет, что она не должна работать, без упоминания ограничения версии.
После догадки Дениса я сделал этот тест:
$in = fopen('php://input', 'r');
echo fread($in, 1024) . "\n";
fseek($in, 0);
echo fread($in, 1024) . "\n";
fclose($in);
echo file_get_contents('php://input') . "\n";
Керлинг:
$ curl http://localhost:8888/tests/test.php -d "This is a test"
This is a test
This is a test
По-видимому, он ограничивается одним прочитанным для открытого дескриптора.
Немного больше копания показало, что действительно php://input
можно читать только один раз, когда-либо, для запросов PUT. В приведенном выше примере использовался запрос POST.