Проблема с созданием zip-файла с использованием PharData или ZipArchive - PullRequest
0 голосов
/ 15 мая 2019

Следующий код создавал zip-файлы из PDF-файлов в течение многих лет в 4 параллельных установках на одном и том же оборудовании.

Поскольку неделя больше не работает для одной системы, код не изменяется.

Загрузка через браузер доставляет испорченный архив, который становится единым, работоспособным PDF-файлом, когда вы вручную изменяете окончание файла с «.zip» на «.pdf».

ЭтоПохоже, что файл отправляется до того, как создание zip готово , поскольку я могу загрузить рабочую копию архива через ftp из папки создания на диске сервера.

Я попытался добавить спящий режим (5Перед возвращением прокомментировал использование PharData, но ничего не работает.Все та же проблема.Есть идеи?

<?php

//use phar class to zip, if existent
if ( class_exists( 'PharData' ) ) {

    $a = new PharData( $path );

    foreach ( $creditmemo_files as $creditmemo_file ) {
        if ( is_string( $creditmemo_file ) ) {
            $a->addFile( $creditmemo_file, basename( $creditmemo_file ) );
        }

    }

}
//otherwise use the usual zip archive class
if ( class_exists( 'ZipArchive' ) ) {

    create_zip( $creditmemo_files, $path );

}


if ( file_exists( $path ) === true ) {

    // http headers for zip downloads
    header( "Pragma: public" );
    header( "Expires: 0" );
    header( "Cache-Control: must-revalidate, post-check=0, pre-check=0" );
    header( "Cache-Control: public" );
    header( "Content-Description: File Transfer" );
    header( "Content-Type: application/zip" );
    header( "Content-Disposition: attachment; filename=\"" . $filename . "\"" );
    header( "Content-Transfer-Encoding: binary" );
    header( "Content-Length: " . filesize( $path ) );
    $bytes_read = readfile( $path );
    ob_end_flush();

}
...