php - fopen 为 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 请求,比如
发布http: //myserverurl/index.php
我确实根据上述请求发送了发布数据,我也尝试过表单编码、二进制和原始数据。
但是 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 正文)。
参考:支持的协议和包装器
推荐阅读
- javascript - 美国移动输入字段自动括号和自动破折号设置问题
- html - 如何使用 html 输入文件选择文件夹
- oracle - 比较两个oracle数据库表和它的值以有效的方式
- django - 在 Django 中检索随机 ManyToManyField 关系的一个字段的最高效的 DB 方法
- python - “Apple 事件超时”使用 xlwings 打开大型电子表格
- java - 从用户读取输入并在 Java 中写入文件时出现问题
- ios - iOS:13 位置始终允许:点击打开设置后,它不会重定向到应用设置页面
- jdbc - 使用 Talend 的雪花 JDBC 连接
- django - 使用 Ajax 在 Django 中填充下拉列表
- javascript - 在菜单链接中使用 # ids 时,Vue Js 历史模式不会删除 #