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



L'archivage de données est l'une des tâches fondamentales du développement web. Qu'il s'agisse de sauvegarder une base de données, de compresser des fichiers téléchargés par l'utilisateur ou d'exporter un grand volume d'informations, le format ZIP reste la solution la plus populaire et la plus universelle. PHP fournit la classe intégrée ZipArchive, qui permet d'effectuer toutes les opérations de base avec les archives ZIP sans installer d'extensions supplémentaires.



Dans cet article, nous allons détailler comment utiliser ZipArchive en PHP : de la création d'une simple archive au traitement de dossiers imbriqués et à la protection par mot de passe. Tous les exemples de code sont prêts à être utilisés sur votre serveur.



Préparation : vérification de l'extension Zip



Avant de commencer, assurez-vous que l'extension zip est activée sur votre serveur. Elle est généralement installée par défaut dans les versions modernes de PHP (7.4+, 8.x). Vous pouvez le vérifier à l'aide de la fonction phpinfo() ou d'un simple script :



<?phpif (extension_loaded('zip')) {    echo 'L\\'extension Zip est disponible';} else {    echo 'L\\'extension Zip est introuvable. Installez-la via php.ini';}?>


Création d'une archive ZIP en PHP



Étape 1. Initialisation de l'objet ZipArchive



Pour commencer, créez une instance de la classe ZipArchive et ouvrez une nouvelle archive à l'aide de la méthode open(). Le deuxième paramètre, le drapeau ZipArchive::CREATE, indique que l'archive sera créée (ou écrasée si elle existe déjà).



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

if ($zip->open($zipName, ZipArchive::CREATE) !== TRUE) { exit("Impossible de créer l'archive $zipName");}?>


Étape 2. Ajout de fichiers à l'archive



La méthode addFile() ajoute un fichier existant du système de fichiers. Le premier argument est le chemin vers le fichier, le second (facultatif) est le nom du fichier dans l'archive (si vous souhaitez le renommer).



<?php// Ajout d'un seul fichier$zip->addFile('document.pdf', 'my_document.pdf');

// Ajout de plusieurs fichiers$files = ['photo1.jpg', 'photo2.jpg', 'photo3.jpg'];foreach ($files as $file) { $zip->addFile($file);}?>


Étape 3. Ajout d'un dossier entier avec conservation de la structure



Si vous devez compresser un répertoire avec tous ses fichiers imbriqués, utilisez un parcours récursif. Voici une fonction prête à l'emploi :



<?phpfunction addFolderToZip($zip, $folder, $parentFolder = '') {    $files = new RecursiveIteratorIterator(        new RecursiveDirectoryIterator($folder),        RecursiveIteratorIterator::LEAVES_ONLY    );

foreach ($files as $file) { if (!$file->isDir()) { $filePath = $file->getRealPath(); $relativePath = $parentFolder . $file->getFilename(); $zip->addFile($filePath, $relativePath); } }}

// Utilisation :$zip->addEmptyDir('my_folder'); // création d'un dossier dans l'archiveaddFolderToZip($zip, '/path/to/source_folder', 'my_folder/');?>


Étape 4. Fermeture de l'archive



Après avoir ajouté tous les fichiers, fermez impérativement l'archive, sinon les données ne seront pas écrites.



<?php$zip->close();echo \"L'archive $zipName a été créée avec succès !\";?>


Décompression d'une archive ZIP en PHP



Pour extraire des fichiers, utilisez la méthode extractTo(). Spécifiez le dossier de destination où les fichiers seront décompressés.



<?php$zip = new ZipArchive();if ($zip->open('example.zip') === TRUE) {    $zip->extractTo('/path/to/extract_folder/');    $zip->close();    echo 'L\\'archive a été décompressée avec succès';} else {    echo 'Erreur lors de l\\'ouverture de l\\'archive';}?>


Fonctionnalités avancées de ZipArchive



Ajout d'une chaîne de caractères en tant que fichier



La méthode addFromString() permet de créer un fichier directement à partir d'une chaîne

Recommendations