Maison >développement back-end >tutoriel php >Comment zipter et dézip les fichiers en php

Comment zipter et dézip les fichiers en php

Joseph Gordon-Levitt
Joseph Gordon-Levittoriginal
2025-03-04 10:39:10626parcourir

How to Zip and Unzip Files in PHP

La compression du fichier de transfert de réseau présente des avantages significatifs. Les utilisateurs peuvent se décompresser à tout moment après le téléchargement. En bref, la compression peut simplifier considérablement les transferts réseau de fichiers pour vous et vos visiteurs.

Les fichiers de compression manuelle peuvent être lourds, mais heureusement, PHP offre de nombreuses extensions spécialisées dans la gestion de la compression et de la décompression des fichiers. Vous pouvez utiliser les fonctions de ces extensions pour compresser automatiquement les fichiers PHP.

Ce tutoriel vous guidera comment compresser les fichiers dans des archives zip dans PHP et décompresser les fichiers à partir des archives zip. Vous apprendrez également à supprimer ou à renommer des fichiers dans vos archives sans décompresser en premier.

    Compression de fichiers unique PHP
  • Compression de fichiers multiples dans le répertoire
  • Modifier ou écraser l'archive
  • PHP
  • ziparchive :: rdonly
  • > Le logo de PHP (disponible en PHP 7.4.3 et plus tard) vous permet d'ouvrir l'archive en mode en lecture seule.
  • Vous pouvez consulter la documentation de cette méthode pour comprendre les différents codes d'erreur renvoyés lors de l'ouverture d'un fichier échoue. Si le fichier zip est ouvert ou créé avec succès, la méthode renvoie l'indicateur Ziparchive :: Écraser si le contenu d'une archive existante n'a pas d'importance. Si une archive avec ce nom spécifique n'existe pas, elle ne crée pas de nouvelles archives.

Vous pouvez utiliser Ziparchive :: Créer en combinaison pour écraser une archive existante et créer une nouvelle archive s'il n'y a pas d'archive avec ce nom spécifique. Les exemples sont les suivants:

Utilisez les méthodes Ziparchive :: Create and Open () pour ouvrir une archive nouvelle ou existante pour lire et écrire.

Dans cette section, nous comprendrons les différences qui peuvent survenir en raison de différentes combinaisons de drapeaux transmis aux options $, passant à Ziparchive :: Create créera une nouvelle archive ou modifiera une archive existante si elle existe déjà. Vous ne recevrez aucun avertissement concernant la modification des archives existantes. Cela signifie que si vous exécutez le code dans cette section pour créer l'archive, puis l'exécutez à nouveau après avoir remplacé l'option d'origine par la nouvelle option, vous obtiendrez des résultats inattendus.

L'archive contiendra alors un répertoire

Falle d'écran

contenant les sous-répertoires
$zip->open('my_compressed_files.zip', ZipArchive::OVERWRITE|ZipArchive::CREATE);
Fichiers / Images

et les images du répertoire

Wallpapers

. Cela peut être un peu déroutant au début et peut vous faire vous demander pourquoi si vous voulez écraser tout dans les archives (s'il existe déjà), mais si vous ne voulez pas que le code lance une erreur s'il n'existe pas, utilisez Ziparchive :: Créer | Ziparchive :: Surcrure.

N'oubliez pas non plus que depuis Libzip 1.6.0, les fichiers vides ne sont plus considérés comme des archives valides. Extraire le contenu de l'archive La classe a une méthode appelée pour extraire le contenu archivé. Vous pouvez l'utiliser pour tout extraire dans l'archive ou simplement extraire certains fichiers spécifiques. Le paramètre

peut être utilisé pour spécifier le nom de fichier unique à extraire ou pour passer un tableau de fichiers.

Une chose à retenir est que vous devez spécifier le chemin correct vers le fichier dans l'archive pour l'extraire. Par exemple, nous avons archivé un fichier de police nommé Alegreyasans-light.ttf dans la section précédente. Ce fichier est stocké dans un répertoire nommé font_files dans l'archive. Cela signifie que le chemin que vous devez spécifier dans le paramètre $entries est FONT_FILES / ALEgreyasans-light.ttf , pas seulement Alegreyasans-light.ttf .

Le répertoire et la structure des fichiers seront conservés pendant le processus d'extraction, et les fichiers seront extraits de leurs répertoires respectifs.

$zip->open('my_compressed_files.zip', ZipArchive::OVERWRITE|ZipArchive::CREATE);

Si le deuxième paramètre est omis, la méthode extrait tous les fichiers de l'archive.

Plus de contrôles d'archives

La classe

ZipArchive fournit également de nombreuses autres méthodes et propriétés pour vous aider à obtenir plus d'informations sur les archives avant de tout extraire.

Vous pouvez utiliser la méthode count() pour calculer le nombre de fichiers dans l'archive. Une autre option consiste à utiliser l'attribut numFiles. Ils peuvent être habitués à itérer tous les fichiers des archives, à extraire uniquement les fichiers requis, ou vous pouvez effectuer d'autres actions sur eux, comme les supprimer des archives.

Dans l'exemple suivant, nous supprimons tous les fichiers de l'archive qui contiennent le mot italic . Des codes similaires peuvent être utilisés pour supprimer tous les fichiers qui ne contiennent pas de mots spécifiques. Vous pouvez également itérer ces fichiers et remplacer des mots spécifiques par d'autres contenus.

<?php

$zip = new ZipArchive();
$zip->open('compressed/user_archive.zip', ZipArchive::CREATE);
$zip->extractTo('uncompressed/', 'font_files/AlegreyaSans-Light.ttf');
$zip->close();

?>

Dans le code ci-dessus, nous utilisons deleteName() pour supprimer un seul fichier. Cependant, vous pouvez également l'utiliser pour supprimer l'intégralité du répertoire.

Fonctions similaires renameName($oldname, $newname) Peut être utilisée pour modifier le nom de n'importe quel fichier dans l'archive. Si un fichier nommé $newname existe déjà, vous recevrez un message d'erreur.

Résumé

Nous avons introduit de nombreuses méthodes très utiles de la classe ZipArchive qui fera une compression et une décompression automatique des fichiers dans PHP un jeu d'enfant. Vous devriez maintenant pouvoir compresser un seul fichier ou un groupe de fichiers à la fois en fonction de vos propres normes. Encore une fois, vous devriez être en mesure d'extraire n'importe quel fichier spécifique de l'archive sans affecter d'autres contenus.

avec l'aide de count() et numFiles, vous pouvez avoir un meilleur contrôle sur les fichiers individuels, et les renommer ou les supprimer sera très facile. Vous devez lire la documentation au moins une fois pour en savoir plus sur ces fonctions.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn