2010-08-12 2 views
3

사용자가 다운로드 할 수 있도록 PHP로 zip 파일을 만듭니다. PHP 나 zipArchive 클래스의 GetStatusString 함수를 검사하는 데 오류가 없습니다. 하지만 파일을 압축 파일에 넣으면 열려고 할 때 "압축 된 (압축 된) 폴더가 잘못되었거나 손상되었습니다"라는 오류 메시지가 나타납니다. 내가 추가하고있는 모든 파일을 검사했는데 모두 좋다. 내가 생각할 수있는 유일한 것은 큰 파일이 문제를 일으키는 것입니다. 그러나 "큰"파일의 크기는 약 0.5 메가 바이트 밖에되지 않으며 zipArchive의 파일 크기 제한에 대한 문서는 찾을 수 없습니다. 시도 할 다른 것들에 대한 생각, 그래서이 문제를 추적 할 수 있습니까? 감사.PHP의 zipArchive 클래스의 크기 제한?

편집 : 문제를 일으키는 특정 파일로 범위를 좁혔습니다. 그 크고 큰 작품들도 있으므로 생각을 버리십시오. 여기서 잘 작동 파일명 예 :

627 Jane.CCD.pdf는
712 Example_DrNotes.pdf
625 Jane.Labs2.pdf

예 상속 파일명에 공백이있다 .. 코드 문제.

623 Jane.Labs.pdf는 파일 이름 문제가 될 수 있었던 것처럼

가 보이지 않는다 : 여기에 작동하지 않는 파일 이름입니다. 이것은 결국 웹을 통해 이루어질 것이지만 서버에서 생성 된 실제 zip 파일을 검사하고 있습니다. 오류가 발생하는 곳입니다.

$zip = new ZipArchive(); 
$zfileName = $GLOBALS["localUploadRoot"] . $zfile; 
$requests = $this->getRequests(true); 
foreach ($requests AS $r) { 
    if (file_exists($GLOBALS["localInboundRequests"] . $r["file"])) { 
     $zip->addFile($GLOBALS["localInboundRequests"] . $r["file"], $r["file"]); 
    } 
} 
$zip->close(); 

편집 : 2 : 가 미안 해요, 난 파일을 게시 할 수 없습니다

여기에 코드입니다. 그것에는 개인 정보가 들어 있습니다.

+0

아마도 zip 파일을 빌드하는 코드의 관련 포턴을 게시해야합니다. 확실히 500K 파일은 문제를 일으키지 않습니다. – Artefacto

+0

생성 프로세스가 실제로 완료됩니까? 추가 할 파일의 코드 및 예제 파일 이름을 표시 할 수 있습니까? 특수 문자가있는 이름을 사용하지 않습니다. –

+0

CLI 또는 웹? 먼저 디스크에 저장하거나 직접 클라이언트에 스트리밍 하시겠습니까? (후자 인 경우 zlib 압축을 사용하지 마십시오.) – Matthew

답변

4

zip64를 사용하지 않는 한 Zip 파일의 파일 제한은 4GB입니다 (압축되지 않은 파일 크기). 아직 PHP에서는 지원되지 않습니다. http://bugs.php.net/bug.php?id=51353을 참조하십시오.

3

zip 파일의 제한은 4GB (압축 파일)입니다. 압축 파일 크기가 4GB보다 크면 압축을 풀 수 없습니다. 그래서, 4GB로 당신의 zip 파일을 분할하는 더 좋은 방법.

+0

야, 방금 내 목숨을 구했어! – Sliq

0

자연 파일 크기 제한 인 zip 파일의 크기가 4GB (~ 3,6GB)이므로이 클래스는 결과의 손상된 파일을 4GB 이상으로 생성합니다. tar.gz를 사용하는 것이 적절한 대안입니다.