Pour illustrer l'utilisation d'archive ZIP, la class foZipArchive et l'exemple ci-dessous montre comment:
- créer un fichier zip à partir de fichier,
- extraire un fichier à partir d'une archive zip.
Encapsulation de ZipArchive
La class est un helper pour l'obhet PHP ZipArchive. En fait, la class ci-dessous utilise les fonctions PHP et teste les résultats de compression ou d'extraction.<?php
/**
* foZipArchive: Compresser et extraire un fichier d'une archive zip
*
* @source http://www.fobec.com/php5/1115/compresser-extraire-fichier-une-archive-zip.html
* @copyright Fobec.com
*/
class foZipArchive {
/**
* Compresser des fichiers dans une archive ZIP
* @param $filename
* @param array $files
* @return boolean
*/
public function newArchive($filename, array $files) {
$za = new ZipArchive();
$res = $za->open($filename, ZipArchive::CREATE);
if ($res === TRUE) {
foreach($files as $file) {
if (file_exists($file)) {
$za->addFile($file, basename($file));
}
}
$za->close();
} else {
return FALSE;
}
return file_exists($filename);
}
/**
* Extraire un fichier d'une archive zip
* @param $zipname
* @param $destpath
* @param $file
* @return boolean
*/
public function extractFile($zipname, $destpath,$file) {
$za = new ZipArchive();
$res = $za->open($zipname);
if ($res === TRUE) {
$za->extractTo($destpath, $file);
$za->close();
} else {
return FALSE;
}
return file_exists($destpath.$file);
}
}
?>
Exemple avec un fichier zip
L'exemple ci-dessous illustre les fonctions de base d'une archive zip:- ajouter des fichiers à un fichier zip,
- extraire des fichiers d'une archive zip.
<?php
require_once 'foziparchive.php';
$zf=new foZipArchive();
//Créer un fichier zip
if ($zf->newArchive('test.zip', array('image.png','video.flv'))==TRUE) {
echo 'ok';
}
//extraire un fichier d'un zip
if ($zf->extractFile('test.zip', $_SERVER['DOCUMENT_ROOT'],'image.png')==TRUE) {
echo 'ok';
}
?>
La class foZipArchive ne révolutionne pas la compression et l'extraction de fichier dans une archive Zip. L'article sert de pense-bete pour garder les fonctions zip sous la main.