2013-05-22 7 views
0

PHP로 압축 파일 압축을 푸는 중입니다. 아카이브의 구조는 7 개의 폴더이며, 각 폴더에는 약 1kB의 10,000 개의 파일이 포함됩니다.PHP로 파일 압축을 풀지 만 모든 파일을 압축 해제하지 않습니다.

내 코드는 매우 간단하고 ZipArchive 클래스를 사용

$zip = new ZipArchive(); 
$result = $zip->open($filename); 
if ($result === true) { 
    $zip->extractTo($tmpdir); 
    $zip->close(); 
} 

나는 데 문제,하지만, 추출이 중단 보인다는 것이다. 첫 번째 폴더는 완전히 추출되지만 두 번째 폴더의 약 절반 만 추출됩니다. 나머지 5 개는 전혀 추출되지 않습니다.

나는 또한 한 번에 10 킬로바이트의 덩어리로 나누기이 코드를 사용하려고했으나 동일한 결과를 얻었다

:

$archive = zip_open($filename); 
while ($entry = zip_read($archive)) { 
    $size = zip_entry_filesize($entry); 
    $name = zip_entry_name($entry); 
    if (substr($name, -1) == '/') { 
     if (!file_exists($tmpdir . $name)) mkdir($tmpdir . $name); 
    } else { 
     $unzipped = fopen($tmpdir . $name, 'wb'); 
     while ($size > 0) { 
      $chunkSize = ($size > 10240) ? 10240 : $size; 
      $size -= $chunkSize; 
      $chunk = zip_entry_read($entry, $chunkSize); 
      if ($chunk !== false) fwrite($unzipped, $chunk); 
     } 
     fclose($unzipped); 
    } 
} 

나는 또한 512에서 PHP의 메모리 제한을 증가 해봤를 MB에서 1024 MB이지만 다시 같은 결과를 얻었습니다. 압축이 풀린 모든 것이 100MB 정도이므로 어쨌든 메모리 문제가 될 것으로 예상하지는 않습니다.

답변

0

아마 최대 실행 시간 ... 0으로 설정하거나 좋은 값을 설정하여 제한을 완전히 해제 할 수 있습니다. 당신이 (위해서는 ini_set 할 수있는 권한이없는 경우

ini_set('max_execution_time', 10000); 

은 ... 때문에 당신이 그 값을 편집 할 수있는 disable_function 지시어의)

... 생산 사용 0으로 설정 해달라고 당신의 php.ini 직접.

+0

이미 set_time_limit()에 대한 호출이 있으며 스크립트는 추출없이 모든 문제를 계속 처리합니다. – Paul

관련 문제