2011-07-27 37 views
0

私は、ユーザーがカートに複数のファイルを追加してから、それらを1つのファイルにまとめて一度にダウンロードできるプロジェクトがあります。PHP ZipArchiveは10MBに制限されています

カートが大きくなって10MBになるとすぐに、ZIPファイルを作成することはできません。 これはupload_max_filesizeのためかもしれないと思っていましたが、それは200mに設定され、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

さて、それを絞りました。ファイルが存在しないため、パス名が壊れていて、ジップエラーが発生しました。私はより良いエラーチェックが必要なように見えます。 – Cvongrim

答えて

0

を参照してください。ファイルが存在しないため、パス名が壊れていて、ジップエラーが発生しました。私はより良いエラーチェックが必要なように見えます。

0

addFile()の方法を使用していますか?

その場合は、その電話をaddFromString() + file_get_contents()に置き換えてください。

2

アーカイブがメモリ内に作成されている場合は、PHP.iniなどの方法でPHPのメモリ制限を増やしたり、ファイルを作成中に直接ディスクに書き込むことができます。

ファイルを作成中にストリームすることもできます。 php rendering large zip file - memory limit reached

関連する問題