2013-05-07 58 views
1

我想print_r一個大的數組來調試它的文件。我試過2種方法:PHP的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)。這裏發生了什麼?

回答

3

問題是,內部print_r($arr, true)只是使用輸出緩衝,如第二個示例中。所以在幕後,兩種方法都是等價的。但爲什麼輸出緩衝不起作用?

好奇,我用$arr = array();替換了$arr = get_large_array();。令我驚訝的是,file.txt被創建,並沒有輸出。我有一個想法。我將$arr更改回大數組,運行代碼並向下滾動到輸出結尾。果然,它被截斷了。我查看了錯誤日誌,並且在print_r行上發生了20次左右的「內存不足」錯誤。在處理大陣列時,print_r內存不足,崩潰並忽略了file_put_contentsob_end_clean,顯示出上述症狀。

對我來說,解決辦法是增加內存限制:

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