控制 zip 存档中文件的排序顺序

Pet*_*ist 10 php java sorting unzip

描述

我有兴趣了解是否有任何方法可以使用 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

Pet*_*ist 5

这其实并没有那么难。我发现文件索引与文件添加到存档的顺序有关,这控制了 的输出,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();
Run Code Online (Sandbox Code Playgroud)


Emi*_*röm 2

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