我有兴趣学习是否有任何方法可以使用PHP和/或Java中的标准例程来控制zip文件中文件的排序顺序。
我对使用shell_exec()
或类似的使用zip / unzip并不感兴趣,但如果它提供易于阅读的解决方案,那么它会引起人们的兴趣。
使用排序顺序,如果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
答案 0 :(得分: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();
答案 1 :(得分:0)
您可以使用命令zipinfo
(或unzip -Z
)来显示存档中的文件。 man zipinfo
也有关于如何对输出进行排序的示例,但如果您读入数组中的文件并对数组进行排序,它也可以在PHP中进行排序。
答案 2 :(得分:0)
解压缩文件(或文件系统上的任何文件)的排序顺序取决于用于查看文件的“客户端”。 * nix系统上的ls命令将显示按名称排序的文件作为默认值。如果您使用某种形式的文件管理器应用程序(或解压缩器),您将能够选择排序。存档上的预定义排序对我来说没有多大意义。