PHP ZipArchive ограничен 10 Мб

У меня есть проект, в котором пользователь может добавить несколько файлов в корзину, а затем заархивировать их в один файл и загрузить их все сразу.

Однако кажется, что как только корзина становится больше 10 МБ, она не может создать 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");
 }

person Cvongrim    schedule 27.07.2011    source источник
comment
Некоторый код поможет нам помочь вам лучше.   -  person Alix Axel    schedule 27.07.2011
comment
на самом деле, загрузив один и тот же файл несколько раз и добавив его в почтовый индекс, я смог создать почтовый индекс размером более 10 МБ. Похоже дело не в этом.   -  person Cvongrim    schedule 27.07.2011
comment
Ну, сузил. Путь был поврежден и вызывал ошибку zip, потому что файл не существовал. Похоже, мне нужна лучшая проверка ошибок.   -  person Cvongrim    schedule 27.07.2011


Ответы (3)


Если архив создается в памяти, вы можете увеличить лимит памяти PHP с помощью PHP.ini или другими способами, либо записать файл непосредственно на диск во время его создания.

Вы также можете передавать файл пользователю по мере его создания. См. рендеринг большого zip-файла php - достигнут предел памяти

person Charles Burns    schedule 27.07.2011

Вы используете метод addFile()?

Если это так, попробуйте заменить этот вызов на addFromString() + file_get_contents().

person Alix Axel    schedule 27.07.2011

Ну, сузил. Путь был поврежден и вызывал ошибку zip, потому что файл не существовал. Похоже, мне нужна лучшая проверка ошибок.

person Cvongrim    schedule 03.08.2011