【发布时间】:2013-04-08 09:50:14
【问题描述】:
我注意到我正在开发的应用程序出现故障,我设法将其缩小到这个问题(我已经为它设置了一个测试用例):
ini_set("display_errors", "1");
error_reporting(E_ALL);
error_log("[test] Memory limit: " . ini_get('memory_limit'));
error_log("[test] Max Execution Time: " . ini_get('max_execution_time'));
$testArray = array("abcdefghijklmnotuv..... 786998 characters later...ijklmEND");
$json = json_encode($testArray);
var_dump($json);
// echo($json);
error_log("[test] Memory: ".memory_get_usage()."B");
当我 var_dump 变量 $json 时,我得到了正确的输出:
string(786998) "["abcdefghijklm....ijklmEND"]"
当我回显变量 $json 时,您可以非常短暂地看到屏幕上出现了一些东西,然后它消失了,结束响应似乎为 NULL。
如果我用字符串而不是数组重复上述操作,也会发生同样的事情。
如果我用字符串重复上述操作并省略 json_encode 步骤,一切都按预期运行,则 var_dump 和 echo 的结果是正确的。
在整个过程中,错误日志中没有任何错误输出,我的内存限制和最大执行时间也还可以:
[test] Memory limit: 256M
[test] Max Execution Time: 30
[test] Memory: 2134296B
有什么想法吗?
关于我的申请的一些信息:
简而言之,有两台服务器。服务器 A 向服务器 B 发送 HTTP 请求,服务器 B 处理请求并将响应发送回服务器 A。响应始终是 JSON 编码的数组。如果响应中的数组值之一太长,则服务器 A 收到 NULL 响应。
【问题讨论】:
-
你确定不是你的浏览器因为大转储而坏了吗?
-
我不这么认为,如果我可以成功地 echo/var_dump 一个同样长的字符串,成功地 var_dump 数组,为什么我也不能回显数组?关于浏览器限制。
-
从外部检查浏览器源代码(不是通过萤火虫等),你可能会在那里看到代码