2010-04-22 6 views
0

여기 내 코드입니다;서버의 파일 압축 문제 PHP

error_reporting(-1); 
    require("zip_min.php"); 

$f = $_SERVER['DOCUMENT_ROOT'] ."/mp3/allmp3s.zip"; 
if (!file_exists($f)) { 
$zipfile = new zipfile(); 
$folder = $_SERVER['DOCUMENT_ROOT'] ."/mp3"; 
if (is_dir($folder)) { 
if($dir = opendir ($folder)) { 
     while (false !== ($file = readdir($dir))) { 
     if($file != ".") { 
     if($file != "..") { 
      $zipfile -> addFile(file_get_contents($folder."/".$file), $file); 
      } 
      } 
     } 
     closedir($dir); 
$contents = $zipfile -> file(); 
if (file_put_contents($f, $contents)) { 

print "ok"; 

} else { 
print "error creating file"; 
} 
} 
} else { 
print "error"; 
} 
} else { 
print "file already exists"; 
} 

이 스크립트를 실행할 때 10 mp3 파일의 총 크기가 100MB입니다. 빈 페이지 만 있어도 아무 것도 발생하지 않습니다. 크기가 30-40 mb 인 경우 잘 작동합니다.

어떻게해야합니까? 당신의 zip_min 라이브러리가 메모리에 압축을 빌드하는 경우

+0

먼저 'error_reporting (E_ALL);하려고하면 문제를 일으킬 수있는 모든 오류가 표시됩니다. – lfx

+0

지금 막 E_ALL로 시도했지만 아직 빈 페이지가 있습니다 : ( –

+0

웹 서버 오류 로그도 확인하십시오 –

답변

2

너무 많은

덕분에, 다음 가능성 스크립트 (ini_set('memory_limit', 0)를 제거하기 위해)에 대한 메모리 제한을 초과하는 것이다. 이 작업을 정기적으로 수행하는 경우 zip 라이브러리가 디스크에 .zip을 대신 빌드 할 수 있는지 확인할 수 있습니다. 매번 100MB의 데이터를 메모리에 저장하는 것은 모든 서버에서 어려울 것입니다. 특히 여러 사용자가 병렬로이 작업을 수행하는 경우 더욱 그렇습니다.

후속 : 당신은 여전히 ​​이상까지 사용하려는 있도록

zip_min는 우편을 구축하는 스크래치 파일을 사용하는 경우에도 그것에 대해 생각, 당신은 여전히, 어쨌든 $contents = $zipfile -> file();와 메모리를 소리내어있어 지퍼가 어떻게 만들어 졌는지 상관없이 100MB의 메모리.