0

ユーザーが複数のファイルをカートに追加し、それらを単一のファイルに圧縮して一度にすべてダウンロードできるプロジェクトがあります。

ただし、カートが 10 MB を超えるとすぐに 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");
 }
4

3 に答える 3

3

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

ファイルが作成されているときに、ファイルをユーザーにストリーミングすることもできます。大きな zip ファイルをレンダリングする PHPを参照してください- メモリ制限に達しました

于 2011-07-27T19:27:22.830 に答える
0

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

addFromString()その場合は、その呼び出しを+に置き換えてみてくださいfile_get_contents()

于 2011-07-27T19:25:53.583 に答える
0

さて、絞った。パス名が壊れており、ファイルが存在しないため、zip エラーが発生していました。より良いエラーチェックが必要なようです。

于 2011-08-03T17:58:46.877 に答える