0

我有一个项目,用户可以将多个文件添加到购物车中,然后将它们压缩到一个文件中并一次下载所有文件。

似乎一旦购物车变得大于 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");
 }
4

3 回答 3

3

如果存档是在内存中创建的,您可以通过 PHP.ini 或其他方式增加 PHP 内存限制,或者在创建文件时直接将文件写入磁盘。

您还可以在创建文件时将文件流式传输给用户。请参阅php 渲染大型 zip 文件 - 已达到内存限制

于 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 回答