LAMP 스택의 대용량 파일에 대한 즉시 Zip 파일 생성
문제:
사용자 다운로드를 위해 여러 개의 대용량 파일을 zip 파일로 생성할 때 기존 방법을 사용하면 과도한 CPU 및 디스크 사용량으로 인해 초기 단계에서 심각한 성능 문제가 발생합니다.
스트리밍을 사용한 해결 방법:
이 문제를 해결하기 위해 popen() 또는 proc_open()을 사용하여 zip 명령 파이프라인을 실행하고 stdout을 PHP 스트림으로 검색함으로써 zip의 스트리밍 기능을 활용할 수 있습니다. 이를 웹 서버 프로세스와 결합하면 zip 파일이 생성되는 즉시 사용자에게 스트리밍할 수 있습니다.
popen()을 사용한 구현:
<?php // Set necessary headers header('Content-Type: application/zip'); header('Content-disposition: attachment; filename="file.zip"'); // Execute zip command and retrieve stdout as a stream $fp = popen('zip -r - file1 file2 file3', 'r'); // Read and echo data in chunks $bufsize = 65535; $buff = ''; while (!feof($fp)) { $buff = fread($fp, $bufsize); echo $buff; } pclose($fp); ?>
최적화 팁:
적절한 콘텐츠 관련 헤더를 사용하세요.
안타깝게도 이 맥락에서 스트리밍 또는 알 수 없는 콘텐츠 길이를 나타내기 위해 헤더를 설정하는 것은 간단하지 않습니다.
flush()에 대한 참고 사항:
읽기/에코 루프 내에서 플러시()를 호출하면 Apache의 내부 출력 버퍼 오버런으로 인해 대용량 파일 및 느린 네트워크에 문제가 발생할 수 있다는 점에 유의하는 것이 중요합니다. 따라서 코드에서는 플러시() 호출을 생략하는 것이 가장 좋습니다.
위 내용은 더 빠른 다운로드를 위해 LAMP 스택에서 대용량 Zip 파일을 스트리밍하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!