Gestion des fichiers ZIP compressés dans PHP est une tâche courante, particulièrement utile lors de la gestion des fichiers de téléchargement ou des archives automatiques. L'extension zip de PHP fournit un ensemble complet d'API pour manipuler les fichiers ZIP, où zip_read () est une fonction clé utilisée pour traverser les entrées dans les fichiers ZIP. Cet article montrera comment utiliser la fonction zip_read () pour lire et extraire chaque contenu de fichier dans un fichier zip un par un.
Avant de commencer, assurez-vous que votre environnement PHP a une extension ZIP activée. Vous pouvez vérifier s'il est activé par:
<?php
phpinfo();
?>
Recherchez zip sur la page, s'il existe, il est activé. Sinon, installez et activez l'extension en fonction de votre système d'exploitation.
Les étapes de base de l'utilisation de zip_read () sont les suivantes:
Utilisez zip_open () pour ouvrir le fichier zip.
Utilisez zip_read () pour traverser chaque entrée.
Utilisez zip_entry_name () pour obtenir le nom d'entrée.
Utilisez zip_entry_open () et zip_entry_read () pour lire le contenu d'entrée.
Facultatif: Écrivez le contenu de lecture dans le fichier pour effectuer l'opération d'extraction.
Voici un exemple complet de lecture et d'extraction de chaque fichier dans le fichier zip un par un dans le répertoire spécifié:
<?php
$zipFile = 'archive.zip'; // Supposons que le fichier est dans le répertoire actuel
$extractTo = 'extracted_files/';
// Assurez-vous que le répertoire cible existe
if (!is_dir($extractTo)) {
mkdir($extractTo, 0755, true);
}
// Ouvrir ZIP document
$zip = zip_open($zipFile);
if (is_resource($zip)) {
while ($zipEntry = zip_read($zip)) {
$entryName = zip_entry_name($zipEntry);
$entryPath = $extractTo . $entryName;
// Ignorer les entrées du répertoire,仅处理document
if (substr($entryName, -1) === '/') {
continue;
}
// 尝试Ouvrir条目
if (zip_entry_open($zip, $zipEntry, "r")) {
$entryContent = zip_entry_read($zipEntry, zip_entry_filesize($zipEntry));
// Assurez-vous que la structure du répertoire existe
$dir = dirname($entryPath);
if (!is_dir($dir)) {
mkdir($dir, 0755, true);
}
// 写入到document
file_put_contents($entryPath, $entryContent);
// Facultatif:输出当前处理的document
echo "已提取document: $entryName<br>";
zip_entry_close($zipEntry);
}
}
zip_close($zip);
echo "ZIP document处理完成。";
} else {
echo "无法Ouvrir ZIP document。";
}
?>
zip_read () lit une entrée à la fois et doit être appelé plusieurs fois dans la boucle pour lire toutes les entrées.
Utilisez zip_entry_filesize () pour obtenir la taille du fichier pour lire le contenu complet.
Vous devez utiliser zip_entry_open () pour lire le contenu d'une entrée.
S'il y a plusieurs couches de répertoires dans le fichier zip, assurez-vous que la structure du répertoire existe avant l'extraction.
Traitement de décompression du document en ligne : Décompressez automatiquement vers le répertoire spécifique au serveur après le téléchargement du package compressé.
Traitement de l'image par lots : décompressez les images du fichier zip téléchargé par l'utilisateur et stockez-les dans le répertoire / uploads / pour le traitement ultérieur.
Sauvegarde et restauration du contenu : le système emballe automatiquement la sauvegarde des données et prend en charge l'extraction et la récupération de fichiers par fichier.