【发布时间】:2014-09-08 09:27:09
【问题描述】:
当我的应用程序尝试解码大型(15K~ 行)JSON 字符串(来自 CURL)时,它失败了:
134217728字节的允许内存大小用尽(尝试分配91字节)
我知道我可以扩大或解除内存限制,但我宁愿避免这样做。我一直想知道是否有不同的方法来解决这类问题——比如将 JSON 字符串分成小块(如array_chunk)。
更新
为了确保问题不是由应用程序中的任何其他函数/循环引起的,我已将 JSON 字符串提取到一个文件中,并尝试直接从该文件中对其进行解码(文件大小 = 11.8MB)。仍然失败。
$y = json_decode( file_get_contents('/var/tmp/test.txt') );
更新 2 该脚本在 Mac OS X 环境中运行。我也在 Ubunto env 上测试过它(也是 128M 内存限制)——它在那里工作得很好。我应该担心吗?
【问题讨论】:
-
这个 JSON 字符串到底有多大?因为 128Mb 是很多内存...
-
行数不代表大小
-
那 15k 行每行有多少数据(大约多少)?将帮助那里决定如何最好地帮助你。还有其他任何事情发生,例如作为循环的一部分传递允许的内存的部分......? (例如,即使 json 是发生错误的地方,也可能不是循环中的较早实例发生内存泄漏的原因)
-
@NiettheDarkAbsol "MB" 不是 "Mb"。显着差异。
-
@MarcinOrlowski 哎呀,确实。再说一次,128Mb (16MB) 仍然是在单个 PHP 脚本中使用的大量 RAM。