php ziparchive оставить незавершенные zip-файлы

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

Проблема в том, что ZipArchive не закрывает файлы при завершении. В итоге я хочу получить три zip-файла:

Package1.zip
Package2.zip
Package3.zip

Вместо этого я получаю что-то вроде этого:

Package1.zip.a012341
Package1.zip.b012342
Package2.zip.a023451
Package2.zip.b023452
Package3.zip.a034561
Package3.zip.b034562

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

Я предполагаю, что есть какие-то настройки, которые мне нужно изменить в php.ini или на моем веб-сервере/IIS. Файлы, которые я пытаюсь создать, довольно большие, где-то между 450-600 МБ.

Это мое лучшее предположение, потому что у меня есть две почти идентичные настройки сервера, на которых я пробовал один и тот же код. Он отлично работает на одном из них, но не на другом. Это доказывает, что мой код ZipArchive не может быть здесь проблемой (кстати, я не устанавливал серверы, поэтому я не уверен, что отличается).

Я пытался увеличить memory_limit и время выполнения в моем php.ini. Последнее было более ранней проблемой, и я получил сообщение о том, что время ожидания истекло.

Заранее спасибо!

Изменить: добавлена ​​функция.

function package_site($filepath, &$context) {
    $context['message'] = 'Creating package';

    // Mac app
    $mac_zipfile = 'public://site_export/mac_package.zip';
    copy_directory($mac_zipfile, $filepath . '/mac_package.zip', '/.*/');
    $files = file_scan_directory($filepath . '/files', '/.*/');

    $mac_zip = new ZipArchive();
    if($mac_zip->open(drupal_realpath($filepath . '/mac_package.zip')) === true) {
        foreach($files as $key => $value) {
            $mac_zip->addFile(drupal_realpath($value->uri), 'mac_package.app/Contents/Resources/' . substr(drupal_realpath($value->uri), strlen(drupal_realpath($filepath . '/files')) + 1));
        }
    } else {
        drupal_set_message("Could NOT open mac_package.zip");
    }
    $mac_zip->close();

    // PC app
    drupal_unlink($filepath . '/package.zip');
    $start_files_path_pc = 'public://site_export/pc_files';
    copy_directory($start_files_path_pc, $filepath . '/files', '/.*/');
    $pc_files = file_scan_directory($filepath . '/files', '/.*/');

    $zip = new ZipArchive();
    $res = $zip->open(drupal_realpath($filepath . '/package.zip'), ZipArchive::CREATE);
    if ($res === TRUE) {
        foreach ($pc_files as $key => $value) {
            $zip->addFile(drupal_realpath($value->uri), substr(drupal_realpath($value->uri), strlen(drupal_realpath($filepath . '/files')) + 1));
        }
        $zip->close();
    }

    // Create a html package
    create_pure_html_package($filepath);

    // HTML package
    drupal_unlink($filepath . '/html.zip');
    $html_files = file_scan_directory($filepath . '/files/site', '/.*/');

    $zip_html = new ZipArchive();
    $res = $zip_html->open(drupal_realpath($filepath . '/html.zip'), ZipArchive::CREATE);
    if ($res === TRUE) {
        foreach ($html_files as $key => $value) {
            $zip_html->addFile(drupal_realpath($value->uri), substr(drupal_realpath($value->uri), strlen(drupal_realpath($filepath . '/files')) + 1));
        }
        $zip_html->addFile(drupal_realpath($filepath . '/start.html'), 'start.html');
        $zip_html->close();
    }

    rrmdir(drupal_realpath($filepath . '/files'));
    unlink(drupal_realpath($filepath . '/start.html'));
}

person user3734001    schedule 12.06.2014    source источник
comment
Можете ли вы опубликовать пример кода, поскольку я использовал ziparchive раньше, чтобы сделать что-то подобное, и не сталкивался с этим   -  person    schedule 12.06.2014


Ответы (1)


Я столкнулся с той же проблемой только сейчас. Я решил проблему, изменив права доступа к каталогу файлов (не только для чтения). Это мой ответ, и я надеюсь, что он поможет вам!

person 小木偶    schedule 16.04.2015