2013-05-07 3 views
1

print_r 큰 배열을 파일에 디버깅하려고합니다.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();으로 바꿨다. 놀랍게도 file.txt이 생성되었고 출력이 없습니다. 나는 생각했다. $arr을 다시 큰 배열로 변경하고 코드를 실행 한 다음 결과의 끝까지 스크롤했습니다. 물론, 그것은 잘 렸다. 오류 로그를 살펴본 결과 print_r 줄에 20 분 정도 "메모리 부족"오류가 발생했습니다. 큰 배열을 취급 할 때, 메모리가 부족하여 file_put_contentsob_end_clean을 무시하고 무시했다.

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

나를 위해

,이 솔루션은 메모리 제한을 늘였다

관련 문제