10

描述

我有兴趣了解是否有任何方法可以使用 PHP 和/或 Java 中的标准例程来控制 zip 文件中文件的排序顺序。

我主要对使用 zip/unzip usingshell_exec()或类似方法不感兴趣,但如果它提供了一个易于阅读的解决方案,它可能会很有趣。

如果 zip 文件中没有可用的排序顺序,则可以安全地假设它表示日期/时间。我没有阅读规格,所以我不知道。

例子

文件

foo.txt
bar.txt
test.txt
newfile.txt

假设每个文件都包含文件名(foo.txt => foo.txt)

问题

我想为文件附加一个排序顺序,以便在使用unzip文件解压时以正确的顺序结束。这很重要,为什么?因为我使用unzip -p管道传输 zip 文件的内容。

文件添加到存档的顺序无关紧要。

结果

预期结果(为了这个例子(使用 unzip -p))

test.txt
foo.txt
newfile.txt
bar.txt

4

3 回答 3

4

这并不难。我似乎文件索引与文件添加到存档的顺序有关,这控制了输出,unzip -p因为它似乎以 0..n 方式迭代文件。

以下是如何创建满足条件的文件。(几乎是因为我忘记了 txt 文件中的换行符)

$files = array(
    'test.txt',
    'foo.txt',
    'newfile.txt',
    'bar.txt'
);

$outfile = 'testout.zip';
if (file_exists($outfile)) {
    unlink($outfile);
}
$o = new ZipArchive();
$o->open($outfile,ZipArchive::CREATE);
foreach($files as $key => $file) {
    $o->addFile($file);
}

$o->close();
于 2010-01-04T09:30:31.767 回答
2

您可以使用命令zipinfo(或unzip -Z)显示存档中的文件。man zipinfo也有关于如何对输出进行排序的示例,但如果您读取数组中的文件并对数组进行排序,也可以在 PHP 中对其进行排序。

于 2010-01-04T08:16:11.667 回答
0

解压缩文件(或文件系统上的任何文件)的排序顺序取决于您用于查看文件的“客户端”。*nix 系统上的 ls 命令将默认显示按名称排序的文件。如果您使用某种形式的文件管理器应用程序(或解压缩器),您将能够选择排序。存档上的预定义排序对我来说没有多大意义。

于 2010-01-04T08:22:46.083 回答