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
Aussi dans la bibliothèque
Validation des données en Go : bibliothèques, exemples et bonnes pratiques
Client Redis Swift : RediStack pour iOS/macOS
Travailler avec les dates en PHP : la bibliothèque Carbon
Programmation Réactive en JavaScript (Node.js) : RxJS & Observables
Travailler avec les dates en Swift : Foundation, SwiftDate, DateTools (iOS/macOS)