Position actuelle: Accueil> Derniers articles> Comment utiliser la fonction zip_read pour combiner file_exists () et mkdir () pour atteindre la fonction de création automatique des répertoires?

Comment utiliser la fonction zip_read pour combiner file_exists () et mkdir () pour atteindre la fonction de création automatique des répertoires?

M66 2025-06-12

Lorsque vous travaillez avec des fichiers ZIP compressés, en particulier lors de la décompression d'un package compressé contenant une structure de répertoire à plusieurs niveaux, s'assurer que le répertoire cible existe est une étape très importante. Sinon, le fichier peut échouer car le chemin de destination n'existe pas. Cet article présentera comment utiliser la fonction zip_read () pour lire chaque entrée du fichier zip et combiner file_exists () et mkdir () pour créer automatiquement le répertoire requis, réalisant ainsi un processus d'extraction de fichier stable.

1. Prérequis

Assurez-vous que votre environnement PHP a une extension ZIP activée. Vous pouvez utiliser le code suivant pour détecter:

 <?php
if (!class_exists('ZipArchive')) {
    die('Zip Extension non activée');
}
?>

2. Exemple d'analyse de code

Voici l'exemple de code complet qui implémente la lecture des fichiers et des répertoires à partir de fichiers zip et créant automatiquement une structure de répertoire:

 <?php
$zipPath = 'example.zip'; // ZIP Chemin de fichier
$extractTo = 'output/';   // Décompresser le répertoire

$zip = zip_open($zipPath);
if (!is_resource($zip)) {
    die('Impossible d'ouvrir ZIP document');
}

while ($entry = zip_read($zip)) {
    $entryName = zip_entry_name($entry);
    $fullPath = $extractTo . $entryName;

    // Obtenez le chemin du répertoire
    $dir = dirname($fullPath);

    // Créer automatiquement des répertoires
    if (!file_exists($dir)) {
        mkdir($dir, 0777, true);
    }

    // 如果是document,Lisez le contenu et écrivez-le
    if (zip_entry_open($zip, $entry, "r")) {
        $content = zip_entry_read($entry, zip_entry_filesize($entry));
        file_put_contents($fullPath, $content);
        zip_entry_close($entry);
    }
}

zip_close($zip);
?>

3. Description détaillée

  1. zip_open ()
    Utilisé pour ouvrir un fichier zip et renvoyer une poignée de ressources.

  2. zip_read () et zip_entry_name ()
    Lisez les entrées dans le package compressé un par un par zip_read (), puis utilisez zip_entry_name () pour obtenir le chemin relatif à l'entrée.

  3. dirname () Extraire le chemin du répertoire
    Qu'il s'agisse d'un fichier ou d'un répertoire, utilisez dirname () pour extraire la pièce de chemin, puis vérifier si le répertoire existe.

  4. file_exists () est utilisé conjointement avec mkdir ()

    • file_exists () est utilisé pour déterminer si le répertoire existe déjà;

    • MKDIR () utilise le troisième paramètre pour définir True pour créer des répertoires à plusieurs niveaux récursivement.

  5. Écrire du contenu du fichier
    Si l'entrée actuelle est un fichier, il est ouvert, lu et écrit sur le chemin de destination.

4. Un exemple de scénario pratique

Supposons que vous ayez téléchargé un package compressé à partir de http://m66.net/files/archive.zip . Après décompression, vous souhaitez conserver sa structure d'origine. Vous n'avez qu'à modifier $ Zippath :

 $zipPath = 'http://m66.net/files/archive.zip'; // Avis:zip_open L'utilisation directe n'est pas prise en charge URL,Besoin de télécharger dans la région d'abord

Vous pouvez utiliser file_get_contents () et file_put_contents () pour enregistrer le fichier localement:

 $tempZip = 'temp_archive.zip';
file_put_contents($tempZip, file_get_contents('http://m66.net/files/archive.zip'));

Remplacez ensuite $ Zippath par $ tempzip .

5. Résumé

En combinant zip_read () , file_exists () et mkdir () , nous pouvons implémenter efficacement l'extraction automatique du contenu du fichier zip et la création de répertoire sans se soucier des erreurs causées par la non-existence du chemin. Cette méthode convient particulièrement à la décompression des fichiers zip avec des structures de répertoire complexes, à l'amélioration de la robustesse et de la convivialité du script.