fopen returns php://stdin 的空内容

fopen returns empty content for php://stdin

我无法打开 fopen 来读取 PHP 中的内容流。没有抛出错误,内容始终为空字符串。

这是我的代码:

$contents='';
$handle = fopen("php://stdin", "r") or error_log('got some error');

while (!feof($handle)) {
    $contents .= fread($handle, 8192);
}
fclose($handle);
error_log($contents);

然后我从 Postman 向我的服务器 url 发送 POST 请求,例如

POST http://myserverurl/index.php

我确实根据上述请求发送了 post 数据,我也尝试过形式编码、二进制和原始数据。

但是 error_log 将空字符串记录到日志文件中,这意味着 fopen 确实有效但它得到的是空内容。

我也检查了 php.ini 设置并且 allow_url_fopen 设置也是正确的。

我正在使用 PHP7.1-fpm 在 nginx 上进行测试。我最近从 Apache 和 PHP 5.6 切换到 nginx 和 php7.1-fpm,它停止工作了。

它在 Apache 和 PHP5.6 上运行良好。

这里有什么问题? 任何帮助将不胜感激。

PHP的默认流中可能存在一些误解。

  • 如果您运行将PHP脚本作为命令,CLI界面会给您php://stdin.

  • 如果你是运行web服务器/cgi/php-fpm环境下的PHP脚本,就没有php://stdin根本。您将获得 php://input 流(对于 POST 正文)。

参考:Supported Protocol and Wrapper