"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 메모리 고갈을 유발하지 않고 PHP에서 대용량 파일을 효율적으로 처리하는 방법은 무엇입니까?

메모리 고갈을 유발하지 않고 PHP에서 대용량 파일을 효율적으로 처리하는 방법은 무엇입니까?

2024년 10월 31일에 게시됨
검색:859

How to Handle Large Files in PHP Efficiently without Causing Memory Exhaustion?

메모리 고갈 없이 PHP를 사용하여 대용량 파일 처리

PHP에서 대용량 파일을 읽고 처리하는 것은 메모리 제한으로 인해 어려울 수 있습니다. file_get_contents() 함수는 허용된 것보다 더 많은 메모리를 소비하는 대용량 파일을 처리할 때 "메모리 소진" 오류를 유발할 수 있습니다.

메모리 할당 이해

file_get_contents( ), 전체 파일을 읽고 메모리에 문자열로 저장합니다. 큰 파일의 경우 할당된 메모리를 초과하여 오류가 발생할 수 있습니다.

대체 접근 방식: 청크 파일 읽기

이 문제를 방지하려면 다음과 같은 대체 방법을 사용하는 것이 좋습니다. fopen() 및 fread()로 파일을 청크로 읽습니다. 이를 통해 한 번에 파일의 더 작은 섹션을 처리하여 메모리 사용량을 효과적으로 관리할 수 있습니다. 다음은 이 접근 방식을 구현하는 함수입니다:

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;
    }
}

사용 예

이 함수를 사용하려면 청크를 처리하는 콜백을 정의하고 필요한 매개변수를 제공합니다.

$success = file_get_contents_chunked("my/large/file", 4096, function ($chunk, &$handle, $iteration) {
    /* Do something with the chunk */
});

추가 고려 사항

또 다른 최적화는 대규모 입력에 적용될 때 상당한 메모리를 소비할 수 있는 복잡한 정규식을 사용하지 않는 것입니다. 대신 strpos, substr,Explode와 같은 기본 문자열 함수를 사용해 보세요.

릴리스 선언문 이 글은 1729143617에서 재인쇄되었습니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3