Documentation sur le système de compression / décompression d'achives
Cette documentation explique comment créer des archives zip, tar ou tar.gz, et comment les décompresser, via la classe
~/main/class/class_compress.php. Cette classe necessite aussi la présence de la classe ~/main/class/class_file.php
pour la gestion des fichiers.
Il est très important de noter que comme la classe File est utilisée en tant que gestionaire de fichier, vous travaillerez
sur des fichiers positionés de façon absolue dans l'arborescence. C'est à dire que quelque soit l'endroit où vous vous trouvez dans l'arborescence du forum,
vous devez simplement passer le nom du fichier depuis la racine du forum. Par exemple si vous travaillez dans le répertoire ~/admin/, et que vou
souhaitez archiver le fichier ~/main/process.php, vous travaillerez avec le chemin main/process.php et non pas
avec ../main/process.php.
Créer une archive.
Pour créer une archive, voilà la marche à suivre :
// Inclusion des deux classes necessaires include(ROOT . 'main/class/class_file.' . PHPEXT); include(ROOT . 'main/class/class_compress.' . PHPEXT); // Instance d'un objet File qui servira à gérer les fichiers compressés. Vous pouvez passer true comme paramètre à File::method(), afin // d'utiliser une connexion FTP. $file = File::method(false); // Instance de la classe de compression. // Le premier argument est le nom de l'archive à créer, suivant l'extension utilisée (zip, tar, tar.gz), l'archive // sera compressée avec une des trois méthodes citées. // Le second argument est l'objet File pour la manipulation des fichiers $compress = new Compress('archive.zip', $file); // Ajoute des fichiers à l'archive $compress->add_file('monfichier.txt'); $compress->add_file('smiley.gif'); // Création de l'archive, qui sera stoquée dans archive.zip $compress->write();La méthode add_file() a quelques propriétés suplémentaires :
- Si vous passez en paramètre un répertoire, le contenu de ce répertoire sera archivé récursivement.
- Cette méthode peut prendre un second paramètre, qui servira à supprimer le chemin donner du nom du fichier. Par exemple :
$compress->add_file('../chemin1/chemin2/chemin3/fichier.gif', '../chemin1/chemin2/');
va ajouter le fichier ../chemin1/chemin2/chemin3/fichier.gif a l'archive, mais en le stoquant dans un répertoire chemin3/fichier.gif. - Cette méthode peut prendre un troisième paramètre, qui sera le contraire du second paramètre, c'est à dire qu'on peut ajouter un répertoire suplémentaire
devant le nom du fichier, par exemple :
$compress->add_file('fichier.gif', '', 'chemin/');
enregistrera fichier.gif dans un répertoire chemin/fichier.gif dans l'archive.
$source = $compress->write(true); header("Pragma: no-cache"); header("Content-Type: text/x-delimtext; name=\"fichier.zip\""); header("Content-disposition: attachment; filename=fichier.zip"); echo $source; exit;lancera un téléchargement de l'archive via le navigateur.
Extraire une archive.
Pour extraire une archive, voilà la marche à suivre :
// Inclusion des deux classes necessaires include(ROOT . 'main/class/class_file.' . PHPEXT); include(ROOT . 'main/class/class_compress.' . PHPEXT); // Instance d'un objet File qui servira à gérer les fichiers compressés. Vous pouvez passer true comme paramètre à File::method(), afin // d'utiliser une connexion FTP. $file = File::method(false); // Instance de la classe de compression. // Le premier argument est le nom de l'archive à extraire. // Le second argument est l'objet File pour la manipulation des fichiers $compress = new Compress('archive.zip', $file); // Extraction de l'archive $compress->extract('chemin/extraction/');tout simplement. La méthode extract() prend en premier argument le dossier dans lequel l'archive sera extraite, et comme second argument un chemin qui sera supprimé du chemin des fichiers extraits, un peu comme le second argument de la méthode add_file().