1

我正在尝试将一个大数组打印到一个文件中以对其进行调试。我尝试了两种方法:

$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)。这里发生了什么?

4

1 回答 1

3

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

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

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

ini_set('memory_limit', '1024M');
于 2013-05-07T16:05:18.967 回答