我注意到,我正在开发被打破了应用程序,我设法将它缩小到这个问题(我已经建立了一个测试案例吧):PHP:长字符串,json_encode,后续代码var_dump和回声
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响应。
你确定这不是你的浏览器,因为巨大的转储损坏? – Uby 2013-04-08 09:52:42
我不这么认为,如果我可以成功地echo/var_dump一个字符串,只是成功var_dump数组,为什么我不能回显数组呢?关于浏览器限制。 – Jeremy 2013-04-08 09:56:29
从外部检查浏览器源代码(不是通过萤火虫等),你可能会看到代码 – 2013-04-08 09:57:40