fopen返回的内容为空php://stdin

fopen返回的内容为空php://stdin,php,nginx,fpm,Php,Nginx,Fpm,我无法让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); 然后从邮递员那里,我在我的服务器

我无法让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);
然后从邮递员那里,我在我的服务器url上发送POST请求,如

职位

我在上面的请求中发送了post数据,我也尝试了表单编码、二进制和原始

但是error_log将空字符串记录到日志文件中,这意味着fopen确实可以工作,但它得到了空内容

我也检查了php.ini设置,并且allow_url_fopen设置也是真的

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

它在Apache和PHP5.6上完全可以正常工作

这里怎么了?
非常感谢您的帮助。

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

  • 如果您以命令的形式运行PHP脚本,CLI界面将为您提供

  • 如果您在web服务器/cgi/PHP fpm环境中运行PHP脚本,则没有
    php://stdin
    没有问题。您将获得流(用于帖子正文)


参考:

是,实际上我正在以CLI命令的形式运行此命令。基本上,我在postfix上设置了一个钩子,将传入的电子邮件通过管道传输到php脚本,这样每当我收到电子邮件时,就会执行一个php脚本。在CLI脚本中使用php://stdin 那么内容是空的。不过,感谢您对这一点的上述澄清。但是你能告诉我什么时候吗php://stdin 当CLI脚本尝试使用访问内容流时,内容为空php://stdin? 同样的代码适用于apache,但在服务器操作系统升级后停止工作您使用的是什么操作系统?有可能是操作系统/后缀升级问题吗?当前的操作系统设置是带有Nginx和PHP7.1-FPM的Ubuntu 16.04。。。早期的安装是带有Apache2和PHP5.6的Ubuntu14.04。。。我只是在操作系统上做了“发布升级”,这意味着我没有再次安装postfix,旧的配置对我的postfix有效,只是这个电子邮件挂钩不起作用
echo“hello world”| php你的脚本。php
返回了什么?是“hello world”吗| php your-script.php并将内容记录到日志文件中,以确认这是后缀问题。非常感谢你的帮助。你知道postfix不向脚本发送内容会有什么问题吗?如果你说,我可以发布我的main.cf配置。