Question

Description de

Je suis intéressé à apprendre s'il y a un moyen de contrôler l'ordre de tri des fichiers dans les fichiers zip en utilisant des routines standards en PHP et / ou Java.

Je ne suis pas intéressé à utiliser principalement zip / dézipper en utilisant shell_exec() ou similaire, mais il peut être intéressant si elle fournit une solution facile à lire.

Avec ordre de tri, il est raisonnable de supposer que cela signifie la date / heure si aucun ordre de tri est disponible dans le fichier zip. Je n'ai pas lu les spécifications, donc je ne sais pas.

Exemple

Fichiers

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

Supposons que chaque fichier contient le nom du fichier (foo.txt => foo.txt)

Problème

Je veux fixer un ordre de tri des fichiers de sorte que lorsque l'aide unzip les décompressé les fichiers finissent dans l'ordre. Ceci est important pourquoi? Parce que j'utilise unzip -p pour tuyau le contenu du fichier zip.

L'ordre dans lequel les fichiers sont ajoutés à l'archive ne devrait pas importer.

Résultat

Résultat prévu (à cause de cet exemple (en utilisant -p dézipper))

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

Était-ce utile?

La solution

Vous pouvez utiliser la commande zipinfo (ou unzip -Z) pour afficher les fichiers dans l'archive. man zipinfo ont également des exemples sur la façon de trier la sortie, mais il peut aussi être triée en PHP si vous lisez dans les fichiers dans un tableau et trier le tableau.

Autres conseils

Il était pas vraiment difficile. Je semble que l'index des fichiers est lié à l'ordre dans lequel les fichiers sont ajoutés à l'archive et cette commande la sortie de unzip -p car il semble itérer les fichiers de la façon 0..n.

Voici comment créer un fichier qui satisfait aux conditions. (Enfin presque oublié depuis que je les sauts de ligne dans mes fichiers 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();

L'ordre de tri des fichiers décompressés (ou des fichiers sur le système de fichiers) dépend du « client » que vous utilisez pour afficher les fichiers. La commande ls sur un système * nix affiche les fichiers classés par ordre alphabétique comme valeur par défaut. Si vous utilisez une forme d'application de gestionnaire de fichiers (ou dézippeur), vous pourrez choisir le tri. tri préprogrammé sur une archive ne fait pas de sens pour moi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top