Introduction au travail avec les archives ZIP en PHP
Les archives ZIP restent l'un des formats de compression de données les plus populaires dans le développement web. En PHP, leur manipulation est implémentée nativement via l'extension Zip, qui fournit la puissante classe ZipArchive. Cela permet aux développeurs de créer, lire, mettre à jour et extraire facilement des fichiers d'archives sans installer de bibliothèques tierces supplémentaires.
Sur le portail éducatif PythonLib.ru, nous aborderons tous les aspects du travail avec ZIP en PHP : des opérations de base aux techniques avancées, y compris la compression avec mot de passe, le traitement de grands volumes de données et l'intégration avec la mise en mémoire tampon de sortie.
Installation et vérification de l'extension Zip
La classe ZipArchive est disponible en PHP depuis la version 5.2.0. Pour l'utiliser, il faut s'assurer que l'extension zip est activée dans la configuration du serveur. Vous pouvez le vérifier à l'aide de la fonction phpinfo() ou d'un simple script :
<?phpif (class_exists('ZipArchive')) { echo "L'extension Zip est disponible";} else { echo "L'extension Zip n'est pas installée";}?>Dans la plupart des hébergements modernes, l'extension est déjà préinstallée. Si ce n'est pas le cas, contactez l'administrateur du serveur ou installez-la via le gestionnaire de paquets (par exemple, apt-get install php-zip pour Debian/Ubuntu).
Opérations de base avec ZipArchive
1. Création d'une nouvelle archive ZIP
Pour créer une archive, on utilise la méthode open() avec le drapeau ZipArchive::CREATE. Voici un exemple de base :
<?php$zip = new ZipArchive();$filename = 'example.zip';
if ($zip->open($filename, ZipArchive::CREATE) === TRUE) { // Ajout d'un fichier à partir d'une chaîne $zip->addFromString('hello.txt', 'Bonjour le monde !'); // Ajout d'un fichier existant $zip->addFile('/path/to/image.jpg', 'images/photo.jpg'); // Ajout d'un répertoire vide $zip->addEmptyDir('documents'); $zip->close(); echo "Archive créée avec succès";} else { echo "Erreur lors de la création de l'archive";}?>Remarque : le deuxième paramètre de addFile() définit le chemin à l'intérieur de l'archive, ce qui permet d'organiser la structure des dossiers.
2. Décompression d'une archive ZIP
Pour extraire tous les fichiers, on utilise la méthode extractTo() :
<?php$zip = new ZipArchive();if ($zip->open('example.zip') === TRUE) { $zip->extractTo('/destination/folder/'); $zip->close(); echo "Archive décompressée";} else { echo "Impossible d'ouvrir l'archive";}?>On peut aussi extraire uniquement un fichier spécifique en indiquant son chemin interne comme deuxième argument :
$zip->extractTo('/destination/', 'images/photo.jpg');3. Lecture du contenu d'une archive sans décompression
Parfois, il suffit de consulter la liste des fichiers à l'intérieur de l'archive :
<?php$zip = new ZipArchive();if ($zip->open('archive.zip') === TRUE) { for ($i = 0; $i < $zip->numFiles; $i++) { $stat = $zip->statIndex($i); echo "Fichier : " . $stat['name'] . " (taille : " . $stat['size'] . " octets)"; } $zip->close();}?>La méthode statIndex() retourne un tableau contenant des informations : nom, taille, date de modification, CRC32 et autres métadonnées.
Fonctionnalités avancées
Compression avec mot de passe (PHP 7.2+)
Depuis PHP 7.2, ZipArchive prend en charge le chiffrement avec mot de passe via l'algorithme AES-256 :
<?php$zip = new ZipArchive();if ($zip->open('protected.zip', ZipArchive::CREATE) === TRUE) { $zip->setPassword('supersecret'); $zip->addFile('document.pdf'); // Activation du chiffrement pour le dernier fichier ajouté $zip->setEncryptionName('document.pdf', ZipArchive::EM_AES_256); $zip->close(); echo "Archive chiffrée créée Aussi dans la bibliothèque
reflect-metadata TypeScript : guide complet avec exemples
Travail avec les dates en Rust : aperçu des bibliothèques de temps et de dates
Travailler avec CSV en Swift (iOS/macOS) : bibliothèques et exemples