Я использую ziparchive для zip-файлов в Linux и не могу открыть в zip-загрузчике по умолчанию по умолчанию, я подозреваю, что это вызвано файловым путем во время добавления файла, например
$zip-addFile('/home/userName/public_html/gallery/license.txt', 'gallery/license.txt');
Предложение по ссылкам ниже упоминает, что я удаляю локальный путь (поскольку это не может быть понято окнами), который становится
$zip-addFile('/home/userName/public_html/gallery/license.txt', 'license.txt');
http://www.jacobbates.com/blog/2012/04/24/corrupt-zip-files-in-windows-from-phps-ziparchive/
PHP ZipArchive поврежден в Windows
Но мне нужно поддерживать структуру каталогов, как мне решить эту проблему?
возможно, сначала добавьте целевой каталог с помощью addEmptyDir
см. ниже код, создайте разные файлы:
<?php error_reporting(E_ALL); ini_set('display_errors','on'); $zip = new ZipArchive; if ($zip->open('tmp/test.zip',ZipArchive::CREATE) === TRUE) { $zip->addFile('data.php', 'data/data.php'); $zip->close(); echo 'ok'; } else { echo 'failed'; } $zip = new ZipArchive; if ($zip->open('tmp/testdata.zip',ZipArchive::CREATE) === TRUE) { if($zip->addEmptyDir('data')) { echo 'Created a new root directory'; } else { echo 'Could not create the directory'; } $zip->addFile('data.php', 'data/data.php'); $zip->close(); echo 'ok'; } else { echo 'failed'; }
Файлы имеют разные размеры файлов:
-rw-r--r-- 1 www-data www-data 633 Apr 29 12:10 testdata.zip -rw-r--r-- 1 www-data www-data 545 Apr 29 12:10 test.zip
unzip test.zip no empty dir добавлено:
unzip test.zip Archive: test.zip inflating: data/data.php
unzip testdata.zip с пустым добавлением:
Archive: testdata.zip creating: data/ inflating: data/data.php
делает создание: data / first
Имела та же проблема со структурой, подобной вашей, в контексте Drupal. Я решил это, установив имя файла Content-disposition
с моим uri
file_transfer($archive_uri, array( 'Content-Disposition' => 'attachment; filename="' . $archive_uri . '"', 'Content-Length' => filesize($archive_uri)) );