我正在尝试将一个大型数组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)
一样。这是怎么回事?
答案 0 :(得分:3)
问题在于内部,print_r($arr, true)
只使用输出缓冲,如第二个示例所示。所以在幕后,两种方法都是等价的。但为什么输出缓冲不起作用?
好奇,我将$arr = get_large_array();
替换为$arr = array();
。令我惊讶的是,file.txt
已创建且没有输出。我有个主意。我将$arr
更改回大型数组,运行代码,然后向下滚动到输出的末尾。果然,它被截断了。我查看了错误日志,print_r
行发生了大约20个“内存不足”错误。在处理大型数组时,print_r
内存不足,崩溃并忽略了file_put_contents
和ob_end_clean
,显示出上述症状。
对我来说,解决方案是增加内存限制:
ini_set('memory_limit', '1024M');