При создании zip-архива к нескольким файлам добавляются непредсказуемые строки - PullRequest
1 голос
/ 09 сентября 2011

Я пытаюсь создать загрузчик PDf, в котором пользователь может выбрать пару файлов, а затем загрузить zip из того, что они выбрали.У меня это работало на моем личном сервере, но на рабочем сервере я получаю странную ошибку.Файл zip генерируется, но к нему добавляется строка чисел, например:

zipfile.zip.a08752, zipfile.zip.b08752

Еще страннее, если я удаляю строку с концаи загрузите файл, который он расширяет должным образом.

Я читал в этой теме PHP Zip Archive, время от времени создавая несколько файлов , что проблема в том, что файл пытается закрываться несколько раз, не удается и повторная попытка.

Вот код для моей функции zip, хотя я подозреваю, что это как-то связано с конфигурацией

function buildZip($params){
    /* Generate unique Id  */<br>
    $downloadid = uniqid();</p>

<code>/* 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>
</code>

. Для Clarity я использую список XML с именем order.xml, чтобы извлечьмассив возможных файлов.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2017

Я просто столкнулся с той же проблемой.Это происходит потому, что не удается создать zip-файл.Это сбой, потому что ваши файлы слишком велики.Чтобы решить эту проблему, мне пришлось создать несколько меньших zip-файлов.Надеюсь, это поможет.

0 голосов
/ 09 сентября 2011

Попробуйте обрезать странную строку чисел после того, как архивирование выполнено

...