Travailler avec les archives ZIP en PHP : guide complet sur ZipArchive

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction au travail avec les archives ZIP en PHP

La création et le traitement d'archives ZIP sont des tâches courantes en développement web. En PHP, cette tâche est résolue à l'aide de l'extension intégrée Zip, qui fournit une classe puissante et pratique ZipArchive. Avec elle, vous pouvez créer de nouvelles archives, extraire des archives existantes, ajouter ou supprimer des fichiers, ainsi que travailler avec des métadonnées.

Dans cet article, nous allons détailler toutes les opérations de base avec les archives ZIP en PHP : de la simple création à la gestion des erreurs et au travail avec les mots de passe. Tous les exemples sont prêts à être utilisés dans vos projets.



Préparation au travail : vérification de la présence de l'extension Zip

Avant de commencer, assurez-vous que l'extension zip est installée et activée sur votre serveur. Vous pouvez le vérifier avec la fonction phpinfo() ou un simple script :

<?phpif (extension_loaded('zip')) {    echo "L'extension Zip est disponible";} else {    echo "L'extension Zip n'est pas trouvée";}?>

Si l'extension est absente, installez-la via le gestionnaire de paquets de votre système d'exploitation (par exemple, apt install php-zip pour Ubuntu) ou activez-la dans le fichier php.ini.



Création d'une nouvelle archive ZIP

La façon la plus simple de créer une archive est d'ouvrir un nouveau fichier en mode écriture et d'y ajouter des fichiers. Voici un exemple de base :

<?php$zip = new ZipArchive();$filename = 'example.zip';

// Créer une nouvelle archive (ZIPARCHIVE::CREATE)if ($zip->open($filename, ZipArchive::CREATE) === TRUE) { // Ajouter un fichier depuis le système de fichiers local $zip->addFile('/path/to/file1.txt', 'file1.txt'); // Ajouter une chaîne comme nouveau fichier dans l'archive $zip->addFromString('hello.txt', 'Bonjour le monde !'); // Ajouter un dossier entier (récursivement) $zip->addGlob('/path/to/dir/*.*'); $zip->close(); echo "L'archive $filename a été créée avec succès";} else { echo "Erreur lors de la création de l'archive";}?>

Notez : le deuxième paramètre de addFile() est le nom du fichier à l'intérieur de l'archive. S'il n'est pas spécifié, le fichier sera enregistré avec son nom d'origine.



Extraction d'une archive ZIP

L'extraction des fichiers d'une archive se fait avec la méthode extractTo(). Indiquez le dossier de destination où les fichiers seront extraits :

<?php$zip = new ZipArchive();if ($zip->open('example.zip') === TRUE) {    // Tout extraire dans le dossier 'unpacked'    $zip->extractTo('/path/to/unpacked/');    $zip->close();    echo "L'archive a été extraite";} else {    echo "Erreur lors de l'ouverture de l'archive";}?>

Si vous souhaitez extraire uniquement certains fichiers, passez leur liste en troisième argument :

$zip->extractTo('/path/to/unpacked/', ['file1.txt', 'hello.txt']);


Affichage du contenu de l'archive

Il est parfois nécessaire d'obtenir la liste des fichiers à l'intérieur de l'archive sans l'extraire. Utilisez pour cela les propriétés et méthodes de ZipArchive :

<?php$zip = new ZipArchive();if ($zip->open('example.zip') === TRUE) {    echo "Nombre de fichiers : " . $zip->numFiles . "<br>";        for ($i = 0; $i < $zip->numFiles; $i++) {        $stat = $zip->statIndex($i);        echo "Fichier : " . $stat['name'] . " (taille : " . $stat['size'] . " octets)<br>";    }        $zip->close();}?>


Ajout de fichiers avec conservation de la structure des dossiers

Pour conserver la hiérarchie des répertoires lors de l'ajout, utilisez des chemins relatifs dans le nom du fichier à l'intérieur de l'archive :

<?php$zip = new ZipArchive();$zip->open('backup.zip', ZipArchive::CREATE);

// Ajouter un fichier en conservant le sous-dossier$zip->addFile('/var/www/images/photo.jpg', 'images/photo.jpg');// Ou récursivement tout un dossier$zip->addPattern('/\\.(jpg|png)$/', '/var/www/images/', ['add_path' => 'images/']);

$zip->close();?>


Suppression de fichiers d'une archive

Supprimer un fichier spécifique

Recommendations