我注意到我正在开发的应用程序正在崩溃,我设法将其缩小到这个问题(我已经为它设置了一个测试用例):
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 响应。