PHP print_r大数组变量不起作用

时间:2013-05-07 16:05:19

标签: php debugging memory printing

我正在尝试将一个大型数组print_r到一个文件来调试它。我尝试了两种方法:

$arr = get_large_array();
file_put_contents('file.txt', print_r($arr, true));

$arr = get_large_array();
ob_start();
print_r($arr);
file_put_contents('file.txt', ob_get_contents());
ob_end_clean();

在这两种情况下,都没有创建file.txt,而$arr正在回显,就像我运行print_r($arr)一样。这是怎么回事?

1 个答案:

答案 0 :(得分:3)

问题在于内部,print_r($arr, true)只使用输出缓冲,如第二个示例所示。所以在幕后,两种方法都是等价的。但为什么输出缓冲不起作用?

好奇,我将$arr = get_large_array();替换为$arr = array();。令我惊讶的是,file.txt已创建且没有输出。我有个主意。我将$arr更改回大型​​数组,运行代码,然后向下滚动到输出的末尾。果然,它被截断了。我查看了错误日志,print_r行发生了大约20个“内存不足”错误。在处理大型数组时,print_r内存不足,崩溃并忽略了file_put_contentsob_end_clean,显示出上述症状。

对我来说,解决方案是增加内存限制:

ini_set('memory_limit', '1024M');