2011-07-27 84 views
0

我有一個項目,用戶可以將多個文件添加到購物車,然後將它們壓縮到一個文件中並一次下載所有文件。PHP ZipArchive限於10MB

看來雖然一旦購物車變大,然後10MB它不能創建zip文件。 我以爲這可能是因爲upload_max_filesize,但設置爲200米,post_max_size相同。

什麼會限制呢?

這是我的代碼。 它創建一個隨機文件名,然後檢查購物車循環並添加每個文件。

// create object 
$zip = new ZipArchive(); 

$filename = "loggedin/user_files/ABX-DOWNLOAD-".rand(1, 1000000).".zip"; 

while (file_exists($filename)):     
    $filename = "loggedin/user_files/ABX-DOWNLOAD-".rand(1, 1000000).".zip"; 
endwhile;  


// open archive 
if ($zip->open('../'.$filename, ZIPARCHIVE::CREATE) !== TRUE) { 
    die ("Could not open archive"); 
} 


// add files 
//echo $all_audio; 

    foreach($audio_ids as $audio_id){ 
     if($audio_id != ""){ 
      $audio = Audio::find_by_id($audio_id); 
      $selected_category  = Categories::find_by_id($audio->category_id); 
      $selected_sub_category = Sub_Categories::find_by_id($audio->sub_category_id); 
      $selected_sub_sub_category = Sub_Sub_Categories::find_by_id($audio->sub_sub_category_id); 

      $f = "uploads/mp3/".$selected_category->category_name."/".$selected_sub_category->sub_category_name."/".$selected_sub_sub_category->sub_sub_category_name."/".$audio->media_path; 
      $zip->addFile($f) or die ("ERROR: Could not add file: $f"); 

     } 
    } 

// close and save archive 
$zip->close() or die("ERROR: COULD NOT CLOSE"); 
} 
+0

某些代碼可以幫助我們更好地幫助您。 –

+0

實際上多次上傳同一個文件並將其添加到一個zip文件後,我可以創建一個大於10mb的zip文件。看起來這不是問題。 – Cvongrim

+0

好吧,縮小它。路徑名已損壞,並且由於文件不存在而導致zip錯誤。看起來我需要更好的錯誤檢查。 – Cvongrim

回答

0

好吧,縮小了它。路徑名已損壞,並且由於文件不存在而導致zip錯誤。看起來我需要更好的錯誤檢查。

0

您使用的是addFile()方法嗎?

如果是這樣,請嘗試用addFromString() + file_get_contents()替換該呼叫。

2

如果檔案正在內存中創建,您可以通過PHP.ini或其他方式增加PHP內存限制,或者在創建時直接將文件寫入磁盤。

您還可以在創建文件時將文件傳輸給用戶。見php rendering large zip file - memory limit reached