PHP에서 대용량 파일 스트리밍
PHP에 내장된 file_get_contents 함수는 파일을 문자열로 읽어오는 편리한 방법이지만 중요한 제한 사항: 전체 파일을 한 번에 메모리에 로드합니다. 이는 PHP 메모리 한도를 소진하고 스크립트 오류를 유발할 수 있으므로 대용량 파일의 경우 문제가 될 수 있습니다.
다행히 대용량 파일을 메모리에 모두 로드하지 않고도 사용자에게 스트리밍할 수 있는 방법이 있습니다. 한 가지 기술은 readfile_chunked 함수를 사용하는 것입니다. 이 함수는 파일 이름을 인수로 사용하고 파일 내용을 지정된 크기의 청크로 출력 버퍼에 보냅니다.
다음은 readfile_chunked 함수를 사용하는 방법에 대한 예입니다.
define('CHUNK_SIZE', 1024 * 1024); // Size (in bytes) of tiles chunk // Function to 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; } // Check if the user is logged in // ... if ($logged_in) { $filename = 'path/to/your/file'; $mimetype = 'mime/type'; header('Content-Type: ' . $mimetype); readfile_chunked($filename); } else { echo 'Tabatha says you haven\'t paid.'; }
이 예에서는 CHUNK_SIZE 상수를 정의하여 각 청크의 크기(바이트)를 지정합니다. 그런 다음 readfile_chunked 함수는 파일을 청크로 읽어서 출력 버퍼로 보냅니다. ob_flush 및 플러시 함수는 청크가 생성될 때 클라이언트에 전송되도록 호출됩니다.
이 기술을 사용하면 전체 파일을 메모리에 로드하지 않고도 대용량 파일을 사용자에게 스트리밍할 수 있습니다. 이는 HTTP 연결을 통해 대용량 파일을 전달하는 효율적인 방법입니다.
위 내용은 대용량 파일을 메모리에 모두 로드하지 않고 PHP에서 어떻게 스트리밍할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!