2017-02-06 8 views
0
나는 다음과 같은 오류를 받고 있어요

에 fgetcsv와 메모리 부족 : Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 36 bytes)큰 파일

가에 실패 라인은 코드 블록에서 while (($dataInputRecord = fgetcsv($inputFile, $maxRowLength, ",")) !== FALSE)입니다 :

if (($inputFile = fopen($fileName, "r")) !== FALSE) { 
     while (($dataInputRecord = fgetcsv($inputFile, $maxRowLength, ",")) !== FALSE) { 
      // do stuff 
     } 
     fclose($inputFile); 
    } 

전체 파일은 32MB입니다. $maxRowLength 크기로 놀아도 도움이되지 않았습니다. 8KB로 자르면 문제가 해결되므로 문제는 파일 크기라고 확신합니다. 파일 크기에 상관없이 어떻게 만들 수 있습니까?

편집 : 내 상사는 루프 내에서 코드가

+0

메모리는 결코 무한하지 않으므로 모든 CSV 파일 크기에서 작동하는 보편적 인 솔루션이 없습니다. 두 가지 해결 방법이 있습니다. http://stackoverflow.com/questions/17520093/read-large-data-from-csv-file-in-php – fvu

+0

전체 파일을 메모리로로드하고 싶지 않습니다. . 루프의 반복을 두 번 이상 지속해야하는 유일한 변수는 특정 조건을 충족시키는 상대적으로 작은 행의 배열과 입력 파일의 핸들이어야합니다. – ccs

+2

글쎄, 나는 실제 문제가 * 당신이'// 물건을 만들 때'무엇을 생략했는지 (매우 높은 스테이크로) 내기 할 것입니다. –

답변

0

당신은 php.ini 파일에 memory_limit을 변경하여 메모리 제한을 증가시킬 수하기로되어 있었는지에 대해 말해 오해의 소지가 있었다

0

이 잘 ini_set('memory_limit', '256M');

을 시도 할 것 같은데

134217728 bytes = 128 MB

+1

: 문제를 해결하지는 않지만 증상을 완화시키는 것만 알리십시오. 이것은 대용량 파일의 경우에도 여전히 실패 할 것이며, 지금은 그보다 조금 크다. –