【发布时间】:2016-05-06 22:15:18
【问题描述】:
我正在尝试将@fopen 与 PHP 一起使用。
在文件 A 中,我使用 @fopen 调用文件 B,它应该从数据库查询中向我发送一个 json 对象。
此查询返回大约 1 900 000 行。
如果在文件 BI 中停止,例如 1000000 行,一切正常,我可以在文件 A 中收到没有错误的 json 对象,但如果我让查询返回1 900 000 行 我收到了这条消息:fopen(the address): failed to open stream: HTTP request failed! HTTP/1.1 500 Internal Server Error
你有什么想法吗?
先谢谢你。
【问题讨论】:
-
检查 Apache 的
error_log和托管B脚本的服务器上的 PHP 错误日志。其中之一列出了错误的原因。我敢打赌它说:“致命错误:xxx字节的允许内存大小已用尽(试图分配yyy字节)”。 -
也可能是服务器脚本超时错误。检查 apache 和 php 日志。您可能会在那里找到答案。
-
我真的不认为,因为如果我直接请求文件 B,它就可以工作。仅当我使用 fopen 通过文件 A 转到文件 B 时才会出现问题
-
@axiac,也许 fopen 的上下文存在一个选项来执行此操作。我已经更改了“超时”,并且在文件 A 和 B 中,内存限制都设置为 2048M,这应该足够了吗?
-
500 Internal Server Error是远程服务器上的错误,很可能是b脚本中止。fopen()对b脚本的运行方式影响很小。您可以尝试获取浏览器发送的确切 HTTP 请求(使用浏览器的开发人员工具获取),并使用curl而不是fopen()在 PHP 中复制它。也许你也可以使用fopen()复制它,制作一个流上下文,我不知道;我从来没有这样做过。
标签: php sql-server json stream fopen