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 正文)。
我无法打开 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 正文)。