PHP文档states即php://input
只能读取一次。尽管文档中有其他说明,但为什么可以多次读取php://输入?
在我的应用程序中,我需要读取两次,一次用于身份验证,一次用于实际处理内容,两个函数都由不同的独立模块处理。疯狂的事情是:它的工作原理。
我可以指望这个工作无处不在,还是这是我的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请求。
...现在,4.5年后,PHP 5.6正式版[支持](http://docs.php.net/manual/en/migration56.new-features.php)从php://输入中读取'不止一次,甚至寻求操作:) – 2015-01-12 22:22:41
对于我们这些还没有在PHP 5.6中,将'file_get_contents('php:// input')'封装在缓存结果并调用它的函数中,而不是一个可行的工作-周围。 – Umbrella 2015-06-08 17:55:05