>  기사  >  백엔드 개발  >  File_get_contents를 사용하여 PHP에서 대용량 파일을 처리할 때 메모리 고갈을 방지하는 방법은 무엇입니까?

File_get_contents를 사용하여 PHP에서 대용량 파일을 처리할 때 메모리 고갈을 방지하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-10-17 13:37:02370검색

How to Avoid Memory Exhaustion When Processing Large Files in PHP Using File_get_contents?

File_get_contents를 사용한 파일 처리 시 메모리 고갈 발생

PHP에서 대용량 파일로 작업할 때 file_get_contents 함수를 사용하여 전체 파일 내용을 PHP로 가져옵니다. 변수로 인해 메모리 소모 오류가 발생할 수 있습니다. 파일 내용을 담고 있는 변수가 메모리에 상주하기 때문인데, 대용량 파일의 경우 할당된 메모리 한도를 초과할 수 있기 때문입니다.

이 문제를 극복하려면 파일 포인터를 사용하여 파일을 처리하는 것이 보다 효율적인 접근 방식입니다. 덩어리로. 이렇게 하면 언제든지 파일의 현재 부분만 메모리에 유지됩니다.

다음은 이 청크 파일 처리를 구현하는 사용자 정의 함수입니다.

<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, [fread($handle, $chunk_size), &$handle, $i]);
            $i++;
        }

        fclose($handle);

        return true;
    } catch (Exception $e) {
        trigger_error("file_get_contents_chunked::" . $e->getMessage(), E_USER_NOTICE);
        return false;
    }
}</code>

이 기능을 사용하려면, 각 데이터 덩어리를 처리하는 콜백 함수를 정의합니다.

<code class="php">$success = file_get_contents_chunked("my/large/file", 4096, function($chunk, &$handle, $iteration) {
    // Perform file processing here
});</code>

또한 정규식 작업을 리팩토링하여 strpos, substr, Trim 및Explore와 같은 기본 문자열 함수를 사용하는 것을 고려하세요. 이렇게 하면 대용량 파일 작업 시 성능이 크게 향상될 수 있습니다.

위 내용은 File_get_contents를 사용하여 PHP에서 대용량 파일을 처리할 때 메모리 고갈을 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.