웹 서비스에서 다운로드할 광범위한 파일의 zip을 생성하는 것은 리소스 집약적일 수 있습니다. 일반적인 접근 방식에는 임시 zip 파일을 생성하여 사용자에게 에코하거나 디스크에 저장하는 작업이 포함됩니다. 그러나 이 방법을 사용하면 다음과 같은 문제가 발생합니다.
대안 접근 방식은 Linux 명령줄 도구인 zip의 스트리밍 기능을 활용하는 것입니다. ls -1 | 우편번호 -@ - | 고양이 > file.zip, zip은 스트리밍 모드에서 작동할 수 있으므로 메모리 사용량이 최소화됩니다. 이 컨텍스트에서 파이프는 버퍼 역할을 합니다. 버퍼가 가득 차면 운영 체제는 쓰기 프로그램을 일시적으로 중단합니다. 이렇게 하면 zip이 동반 프로그램의 쓰기 속도에 맞는 속도로 작동합니다.
PHP를 사용하여 LAMP 스택에서 동일한 스트리밍 메커니즘을 달성하려면 popen() 또는 proc_open() 함수를 활용하여 zip 명령을 실행할 수 있습니다. 그런 다음 명령의 stdout을 PHP 스트림으로 검색할 수 있습니다. 다음 코드 조각은 이러한 기술을 결합하여 zip 파일이 생성되는 동안 사용자에게 zip 파일을 스트리밍하는 방법을 보여줍니다.
header('Content-Type: application/octet-stream'); header('Content-disposition: attachment; filename="file.zip"'); $fp = popen('zip -r - file1 file2 file3', 'r'); $bufsize = 8192; $buff = ''; while(!feof($fp)) { $buff = fread($fp, $bufsize); echo $buff; } pclose($fp);
이 코드는 임시 저장 장치나 필요 없이 zip 파일을 클라이언트에 직접 스트리밍합니다. 과도한 메모리 소비. 이는 bash 스니펫에서 cat 명령의 기능을 효과적으로 에뮬레이트합니다.
위 내용은 리소스에 부담을 주지 않고 PHP에서 대용량 Zip 파일을 스트리밍하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!