Position actuelle: Accueil> Derniers articles> Comment utiliser zip_read avec zip_open pour traverser et lire chaque entrée dans un fichier zip?

Comment utiliser zip_read avec zip_open pour traverser et lire chaque entrée dans un fichier zip?

M66 2025-06-23

La gestion des packages compressés ZIP dans PHP est une tâche très courante, en particulier lors de la gestion des fichiers compressés téléchargés par des utilisateurs ou des fichiers de données emballés. Ziparchive est une classe d'opération recommandée dans PHP moderne, mais les fonctions telles que Zip_Open et Zip_Read sont toujours largement utilisées dans certains scénarios spécifiques ou dans les anciennes versions de PHP. Cet article présentera comment traverser et lire toutes les entrées dans un fichier ZIP via ZIP_OPEN et ZIP_READ .

Introduction aux fonctions de base

PHP fournit un ensemble de fonctions sous-jacentes pour manipuler des fichiers zip, notamment:

  • zip_open ($ nom de fichier) : ouvrez un fichier zip et renvoyez une poignée zip.

  • zip_read ($ zip) : lisez l'entrée suivante et renvoyez une ressource d'entrée.

  • zip_entry_name ($ entrée) : Obtenez le nom de l'entrée.

  • zip_entry_open ($ zip, $ entrée) : ouvrez une entrée.

  • zip_entry_read ($ entrée, $ la longueur) : lit le contenu de l'entrée ouverte.

  • zip_entry_close ($ entrée) : fermez l'entrée actuellement ouverte.

Ces fonctions nous permettent d'accéder à des fichiers dans chaque package compressé de manière en streaming.

Exemple de code

Voici un exemple complet montrant comment utiliser ces fonctions pour lire toutes les entrées dans un fichier zip:

<code> $ zipfile = '/path/to/your/archive.zip';

$ zip = zip_open ($ zipfile);

if (is_resource ($ zip)) {
while ($ entry = zip_read ($ zip)) {
$ entryName = zip_entry_name ($ entrée);
Echo "Entrée de lecture:". $ entryName. Php_eol;

     if (zip_entry_open($zip, $entry, "r")) {
        $content = '';
        while ($buffer = zip_entry_read($entry, 1024)) {
            $content .= $buffer;
        }

        echo "Le contenu est le suivant:" . PHP_EOL;
        echo $content . PHP_EOL;

        zip_entry_close($entry);
    } else {
        echo "Impossible d&#39;ouvrir une entrée: " . $entryName . PHP_EOL;
    }
}
zip_close($zip);

} autre {
Echo "Impossible d'ouvrir le fichier zip". . Php_eol;
}
</code>

Utiliser des scénarios

  • Interprétation du téléchargement des packages compressés : par exemple, si l'utilisateur télécharge des photos ou des fichiers texte sous forme de packages compressés, nous pouvons utiliser la méthode ci-dessus pour lire le contenu de chaque fichier et l'enregistrer sur le serveur.

  • LECTURE DE FICHIER DE LA CONFIGURATION DU BATCH : Certains systèmes de déploiement automatisés emballeront plusieurs fichiers de configuration dans ZIP, et les informations requises peuvent être extraites en traversant la lecture.

  • Migration des données et récupération de sauvegarde : lisez chaque élément de données dans le fichier de sauvegarde compressé et écrivez dans le système cible.

Choses à noter

  1. La fonction liée à Zip_Open est fournie par l'extension ZIP de PHP, et vous devez vous assurer que l'extension est activée dans votre environnement PHP.

  2. Ces fonctions conviennent au traitement simple des packages compressés, et Ziparchive est recommandé pour les packages compressés chiffrés ou les structures complexes.

  3. La longueur de lecture maximale par défaut de zip_entry_read est recommandée pour définir 1024 ou toute autre valeur appropriée pour éviter les frais généraux de mémoire excessive.

  4. Pour les fichiers téléchargés par les utilisateurs, faites attention au traitement des chemins et du contenu pour empêcher les attaques de périphériques ZIP (glissement zip).

Exemples d'application pratiques

Supposons qu'il y ait un paquet compressé téléchargé de l'avant à l'adresse du serveur:

<code> https://m66.net/uploads/data.zip </code>

Vous pouvez l'enregistrer localement et utiliser ce code pour le traiter, et classer ou stocker le contenu du package compressé.

Résumer

Avec Zip_Open et Zip_read , PHP fournit un moyen de bas niveau mais flexible de traverser les entrées dans un fichier zip un par un. Bien que Ziparchive soit plus recommandé dans le développement moderne, ces fonctions de base sont encore de valeur pratique dans certains environnements spécifiques. Comprendre comment cela fonctionne peut vous aider à obtenir plus de contrôle et de flexibilité lors de la gestion des fichiers compressés.