2011-04-21 2 views
9

ZipArchive()를 사용하여 CentOS 5.6 및 PHP 5.2.12에서 실행되는 PHP 스크립트가 1.6Gb 이상인 경우 .zip 파일을 만들지 만 2GB 이상의 큰 보관 파일은 만들지 않는 경우 - PHP는 명백한 오류는 없다. PHP 오류 로그 또는 표준 오류의 아무 것도 없습니다. 스크립트가 대화식으로 실행되지 않고 cmd 행에서 실행 중입니다.PHP 대용량 .zip 파일을 만들 때 중단됨

스크립트가 약 8 분 동안 실행되고 임시 보관 파일이 커지고 파일 크기를 확인하는 동안 마지막 목록에 tmp 파일의 크기가 2120011776 인 것으로 표시되고 tmp 파일이 사라지고 PHP 스크립트가 논리를 통과하여 코드를 실행합니다 아카이브가 생성 된 후

위쪽에 CPU가 여전히 95 %로 표시되고 새 tmp 아카이브 파일이 생성됩니다.이 파일은 5 분 이상 더 기다리면 자동으로 완료되지 않은 tmp 아카이브 파일이 중지되고 남습니다. 이 테스트에서는 예상 파일 수가 4000 개 미만입니다.

스크립트는 작은 보관 파일을 만드는 데 적합합니다.

대용량 원본 데이터의 여러 집합에서 테스트되었습니다. 대용량 파일의 경우에도 마찬가지입니다.

이 문제는이 질문에 대한 비슷한 소리 : Size limit on PHP's zipArchive class?

나는 어쩌면 생각 -l 명령은 2K 블록의 수를 반환하고, 따라서 2120011776 4GB의에 가까운 것입니다하지만 크기가 바이트에있는 LS - 크기 xxxx.zip.tmpxx 파일의

감사합니다.

+11

PHP가 32 비트 서버를 실행하는 경우 ZIP 확장명은 내부적으로 2GB 파일 (부호있는 정수)로 제한 될 수 있습니다. 어쨌든 .zip 형식 자체가 그 이상으로 기능하는지 확실하지 않습니다. – mario

+0

스크립트가 완전히 죽지 않는 경우 시간 또는 메모리 제한 문제가 아닙니다. Zip 라이브러리에는 한도가 있어야합니다. 문서에서 상한선을 제안합니까? –

+0

볼 수있는 제한이 없습니다. 메모리가 고갈되고 ziparchive가 완료되었거나 실패한 경우 스크립트가 코드를 계속 실행하면 PHP 오류가 발생할 것으로 예상됩니다. – blainelang

답변

-2

php.ini 최대 실행 시간이
일 것입니다. 아마도 해고 될 것입니다!
값을 올려보세요!

OS마다 다른 파일 크기 제한이 있으므로 확인해보십시오!

+1

스크립트가 8 분 동안 실행되고 죽지 않으며 zip 메서드가 완료되기 전에 반환됩니다. 이것은 시간 제한 문제가 아니라는 것을 의미합니다. –

-1

PHP에서 set_limit 변수를 사용합니까?

. Htacess 또는 PHP 스크립트 내에서. 스크립트 내부 set_time_limit (0); .htaccess 내부 php_value memory_limit 214572800;

+0

CLI 프로세스에 대한 메모리 제한이 없습니다. – pgampe

2

많은 것들이있을 수 있습니다. 프로세스를 처리 할 충분한 여유 디스크 공간이 있다고 가정합니다. 다른 사람들이 언급했듯이 php.ini 파일을 편집하거나 코드 자체에서 ini_set() 함수를 사용하여 문제가 해결 될 수 있습니다.

기기의 메모리 용량은 얼마입니까? 실제 메모리가 소모되면 일정 크기 이후에 정기적으로 중단됩니다. 따라서 스크립트 전에 사용 가능한 메모리 사용량을 확인하고 스크립트가 실행될 때 모니터링하십시오.

세 번째 옵션은 파일 시스템 자체를 기반으로 할 수 있습니다. CentOS에 대한 경험이별로 없지만 일부 파일 시스템은 2GB 이상의 파일을 허용하지 않습니다. product page에서 CentOS의 대부분 시스템이이를 처리 할 수있는 것처럼 보입니다.

가장 유망한 것으로 보이는 네 번째 옵션은 위에 링크 된 제품 페이지를 보면 나타납니다. 또 다른 가능한 원인은 "프로세스 당 최대 가상 주소 공간 x86"이며 약 3GB입니다. x86_64는 약 2tb이므로 프로세서 종류를 확인하십시오.

다시 네 번째 옵션이 범인 인 것처럼 보입니다.

+0

나는 또한 어떤 종류의 32 비트 정수 (signed ?!) 한계에 부딪치게된다고 말할 것이다. – pgampe

-1

파일 크기가 클 경우 ZIP 압축 파일을 만드는 데 시간이 오래 걸리지 만 PHP (php.ini)는 최대 실행 시간이므로이 값을 늘려야합니다.

관련 문제