메모리 고갈 없이 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와 같은 기본 문자열 함수를 사용해 보세요.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3