PHP로 대용량 파일 스트리밍
PHP의 메모리 제한을 초과하는 대용량 파일을 처리할 때는 파일을 직접 스트리밍해야 합니다. 사용자의 브라우저를 메모리에 완전히 로드하지 않고 이 기술을 사용하면 메모리 소모 문제를 일으키지 않고 대용량 데이터를 효율적으로 처리할 수 있습니다.
파일 스트리밍에 대한 한 가지 접근 방식은 file_get_contents() 함수를 사용하는 것입니다. 그러나 이 방법을 사용하려면 전체 파일을 메모리에 로드해야 하기 때문에 대용량 파일에는 적합하지 않습니다.
이러한 한계를 극복하기 위해 파일을 더 작은 청크로 나누어 스트리밍하는 청킹 접근 방식을 구현할 수 있습니다. 순차적으로. 권장되는 접근 방식은 다음과 같습니다.
define('CHUNK_SIZE', 1024*1024); // Size (in bytes) of tiles chunk // Read a file and display its content chunk by chunk function readfile_chunked($filename, $retbytes = TRUE) { $buffer = ''; $cnt = 0; $handle = fopen($filename, 'rb'); if ($handle === false) { return false; } while (!feof($handle)) { $buffer = fread($handle, CHUNK_SIZE); echo $buffer; ob_flush(); flush(); if ($retbytes) { $cnt += strlen($buffer); } } $status = fclose($handle); if ($retbytes && $status) { return $cnt; // return num. bytes delivered like readfile() does. } return $status; } if (/* User is logged in */) { $filename = 'path/to/your/file'; $mimetype = 'mime/type'; header('Content-Type: '.$mimetype); readfile_chunked($filename); } else { echo 'Access denied.'; }
이 코드에서 readfile_chunked() 함수는 파일을 1MB 청크로 나누고 각 청크를 사용자의 브라우저로 스트리밍합니다. 출력 버퍼를 플러시하면 전체 파일을 읽을 때까지 기다리지 않고 청크가 즉시 전송됩니다.
이 접근 방식을 구현하면 메모리 문제 없이 대용량 파일을 사용자에게 효율적으로 스트리밍할 수 있습니다.
위 내용은 메모리 제한을 초과하지 않고 PHP에서 대용량 파일을 스트리밍하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!