대용량 파일 처리를 처리할 때 악명 높은 PHP Fatal error: Allowed memory Exhausted 오류가 반복되는 문제가 될 수 있습니다. 이 문제는 file_get_contents()가 크기 조정 가능한 파일의 전체 내용을 메모리로 읽으려고 시도할 때 발생하며, 종종 할당된 메모리 제한을 초과합니다.
전체 파일을 로드하는 대신 더 효율적인 접근 방식은 파일을 포인터로 열고 fread()를 사용하여 더 작은 덩어리로 읽는 것입니다. 이를 통해 대용량 파일을 처리하는 데 중요한 메모리 관리가 가능해집니다.
아래는 Node.js의 파일 처리 API 기능을 모방한 사용자 정의 함수입니다.
<code class="php">function file_get_contents_chunked($file, $chunk_size, $callback) { try { $handle = fopen($file, "r"); $i = 0; while (!feof($handle)) { call_user_func_array($callback, array(fread($handle, $chunk_size), &$handle, $i)); $i++; } } catch (Exception $e) { trigger_error("file_get_contents_chunked::" . $e->getMessage(), E_USER_NOTICE); return false; } fclose($handle); return true; }</code>
이 함수는 세 가지를 허용합니다. 매개변수: 파일 경로, 원하는 청크 크기, 청크 읽기마다 호출될 콜백 함수
file_get_contents_chunked() 함수는 다음과 같이 사용할 수 있습니다. :
<code class="php">$success = file_get_contents_chunked("my/large/file", 4096, function ($chunk, &$handle, $iteration) { /* Process the chunk here... */ });</code>
큰 데이터 덩어리에 대해 여러 정규식 작업을 수행하는 것은 비효율적입니다. strpos(), substr(), Trim() 및Explode()와 같은 기본 문자열 조작 기능을 사용하는 것이 좋습니다.
대신:
<code class="php">$newData = str_replace("^M", "", $myData);</code>
용도:
<code class="php">$pattern = '/\r\n/'; $replacement = ''; $newData = preg_replace($pattern, $replacement, $myData);</code>
위의 기술을 활용하면 메모리 소모 오류 없이 대용량 파일을 효과적으로 처리할 수 있습니다.
위 내용은 대용량 파일에 file_get_contents()를 사용할 때 메모리 고갈 오류를 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!