Zip arşivi dosyaların kontrolü sıralama düzeni

3 Cevap java

Description

PHP ve / veya Java standart rutinler kullanarak zip dosyaları içindeki dosyaları sıralama düzenini denetlemek için herhangi bir yol olup olmadığını öğrenme ilgileniyorum.

I shell_exec() veya benzer kullanarak unzip / zip kullanarak öncelikle ilgi değilim, ama bu çözüm okumak için kolay bir sağlar eğer ilgi olabilir.

Sıralama düzeni ile hiçbir sıralama düzeni zip dosyası içinde mevcut ise o tarih / zaman demektir varsaymak güvenlidir. Ben gözlük okumadım ben bilemem.

Example

Files

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

Kullanıcının her dosya (foo.txt => foo.txt) dosyasının adını içerdiğini varsayalım

Problem

Ben kullanırken çözdükten unzip dosyalar doğru sırayla sonuna kadar böylece dosyaları bir sıralama düzeni eklemek istiyorum. Bu nedenle önemlidir? I unzip -p borusuna zip dosyasının içeriğini kullanmak için.

Dosyaları arşive eklenmiştir hangi sırası önemli olmamalı.

Result

Amaçlanan sonuç (bu örneğin uğruna (unzip-p) kullanılarak)

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

3 Cevap

Siz arşiv dosyaları göstermek için zipinfo (veya unzip -Z) komutunu kullanabilirsiniz. man zipinfo aynı çıktıyı sıralamak için nasıl örnekler var, ama bir dizide dosyaları okumak ve dizi sıralamak o da eğer PHP sıralanabilir.

Bu gerçekten zor değildi. Ben dosyaları indeks dosyaları arşive eklenmiştir hangi sırayla ilişkili olduğu görünür ve 0 .. n moda dosyaları yineleme gibi görünüyor çünkü bu unzip -p çıkışını kontrol eder.

İşte koşullarını karşılayan bir dosya oluşturmak için nasıl. (Eh benim txt dosyaları satırsonu unuttum neredeyse beri)

$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();

(Dosya sistemi veya herhangi bir dosya) fermuarını açıp dosyaları ve sıralama dosyaları görüntülemek için kullandığınız 'istemci' bağlıdır. * Nix sistemde ls komutu varsayılan olarak isim tarafından sipariş dosyaları gösterecektir. Eğer dosya yöneticisi uygulaması (veya Unzipper) bazı formu kullanarak eğer sıralamayı seçmek mümkün olacak. Bir arşiv önceden tanımlanmış sıralama bana çok mantıklı değil.