Я пытаюсь создать загрузчик PDF, в котором пользователь может выбрать пару файлов, а затем загрузить zip-архив того, что он выбрал. У меня это работало на моем личном сервере, но на рабочем сервере я получаю нечетную ошибку. Создается zip-файл, но к нему добавляется строка чисел, например;
zipfile.zip.a08752, zipfile.zip.b08752
Еще более странно, если я удалю строку с конца и загружу файл, он правильно расширится.
Я читал в этой теме PHP Zip Archive спорадически создает несколько файлов, что это проблема с попыткой закрытия файла несколько раз, неудачей и повторной попыткой.
Heres the code for my zip function, though I suspect it's something to do with the configuration of the
function buildZip($params){ /* Generate unique Id */
$downloadid = uniqid();/* Pull in the order.xml */ if(!empty($_REQUEST['downloadlink'])){ if( $params->usexml == true){ $xml = @simplexml_load_file($params->pdfolder.'/order.xml'); $order = $xml->children(); }else{ $order = $params->files; } /* Create the new Zip */ $zip = new ZipArchive(); if ($zip->open($params->zipname.'version'.$downloadid.'.zip', ZIPARCHIVE::CREATE) !== TRUE) { die ("Could not open archive"); } /* Generate the download link to output further down the page */ global $downloadLink; $downloadLink = $params->zipname.'version'.$downloadid.'.zip'; /* Make selected variable available to build the listSelection function */ global $selected; $selected = array(); $i = 0; foreach($order as $el){ if (isset($_POST[$i]) == true){ //generate list of selected PDF's array_push($selected, $el->name); //grab selected pdf's and zip them. echo $zip->addFile($params->pdfolder.'/'.$el->link); $zip->addFile($params->pdfolder.'/'.$el->link) or die ("ERROR: Could not add file: pdf'.$i.'.html"); } $i++; } $zip->close(); } } <code>
Для ясности я извлекаю список XML с именем order.xml, чтобы получить массив возможных файлов.