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 : La méthode write() peut prendre un argument, qui est soit false soit true. Par défaut il vaut false. Si vous lui passez true, le fichier de l'archive ne sera pas écrit, et le code créé sera simplement retourné. Par exemple :
$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().