0

我使用 ziparchive 在 linux 中压缩我的文件,并且无法在 windows 默认 zip 上传器中打开,我怀疑这是由 addfile 期间的文件路径引起的,例如

$zip-addFile(‘/home/userName/public_html/gallery/license.txt’, ‘gallery/license.txt’);

下面链接的建议提到我可以删除本地路径(因为 Windows 无法理解),这变成了

$zip-addFile(‘/home/userName/public_html/gallery/license.txt’, ‘license.txt’);
  1. http://www.jacobbates.com/blog/2012/04/24/corrupt-zip-files-in-windows-from-phps-ziparchive/

  2. Windows 中的 PHP ZipArchive 损坏

但是我需要维护目录结构,我应该如何解决这个问题?

4

2 回答 2

0

在 Drupal 上下文中,与您的结构相似的结构也有同样的问题。Content-disposition我通过用我的 uri设置文件名解决了这个问题

file_transfer($archive_uri, array(
    'Content-Disposition' => 'attachment; filename="' . $archive_uri . '"',
    'Content-Length'      => filesize($archive_uri))
  );
于 2013-11-05T15:11:37.213 回答
0

也许首先添加目标目录,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

解压缩 test.zip 没有添加空目录:

unzip test.zip
Archive:  test.zip
  inflating: data/data.php     

解压缩 testdata.zip 并添加一个空目录:

Archive:  testdata.zip
creating: data/
  inflating: data/data.php 

是否创建:数据/第一

于 2013-04-29T10:20:41.620 回答