LAMP 스택에 스트리밍 ZIP 아카이브 생성: 리소스 병목 현상 제거
웹 서비스 환경에서 대용량 파일의 ZIP 아카이브를 생성하면 다음과 같은 문제가 발생합니다. 자원 집약적인 프로세스의 가능성. 기존 방식에서는 초기 지연, 높은 메모리 사용량 및 임시 디스크 공간 소비가 발생합니다.
과제
기존 방식의 단점은 다음과 같습니다.
대체 솔루션
ZipStream-PHP는 파일별 처리를 사용하여 기존 방식을 개선합니다. 그러나 여전히 높은 메모리 사용량과 리소스 급증 문제에 직면해 있습니다.
최적의 접근 방식: 스트리밍 ZIP 생성
최적의 솔루션은 ZIP 파일을 다음으로 직접 스트리밍하는 것입니다. 사용자는 다음 bash 스니펫에 사용된 프로세스를 미러링합니다.
ls -1 | zip -@ - | cat > file.zip
여기서 zip 명령은 스트리밍 모드에서 작동하므로 메모리 사용량이 적습니다. 파이프는 cat이 출력을 작성할 수 있는 만큼만 zip이 빠르게 작동하도록 보장합니다.
LAMP 스택에서 구현
LAMP 스택에서 이러한 스트리밍 동작을 달성하려면 , popen() 또는 proc_open() 함수를 활용하여 unix 파이프라인을 실행할 수 있습니다. 다음 코드 조각은 이 개념을 보여줍니다.
<?php // Send all necessary headers header('Content-Type: application/x-gzip'); // Execute pipeline using popen $fp = popen('tar cf - file1 file2 file3 | gzip -c', 'r'); // Stream archive to user $bufsize = 65535; $buff = ''; while( !feof($fp) ) { $buff = fread($fp, $bufsize); echo $buff; } pclose($fp); ?>
이 접근 방식은 비차단 I/O를 활용하여 LAMP 스택에서 ZIP 아카이브 스트리밍을 위한 리소스 오버헤드가 적은 솔루션을 제공합니다.
위 내용은 LAMP 스택은 어떻게 리소스 병목 현상 없이 효율적으로 ZIP 아카이브를 스트리밍할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!