Avant de se lancer ?
Pour compresser des archives ou les décompresser via php vous devez au préalable disposer de la ziplib : Cliquez ici pour la télécharger
Vérifiez aussi que le plugin "php_zip" est bien activé sur votre serveur en exécutant ce petit script :
Comment compresser des fichiers ?
Voici la démarche à suivre pour compresser des fichiers avec la zip lib.
La première partie permet de zipper un seul fichier :
<?php
require( "lib/zip.lib.php" ) ; // Indiquez le chemin d'accès à la lib
$zip = new zipfile( ) ; // On crée une nouvelle instance zip
$nom_fichier = "mon_document.doc" ; // Nom du fichier à compresser
$fo = fopen($nom_fichier,'r') ; // On ouvre le fichier
$contenu = fread($fo, filesize($nom_fichier)) ; // On enregistre le contenu
fclose($fo) ; // On ferme le fichier
$zip->addfile($contenu, $nom_fichier) ; // On ajoute le fichier
$archive_zip = $zip->file() ; // On associe l'archive
$open = fopen( "monrep/fichier.zip" , "wb"); // Crée le fichier zip
fwrite($open, $archive_zip); // Enregistre le contenu de l'archive
fclose($open); // Ferme l'archive
?>
Cette 2ème partie permet de compresser plusieurs fichiers :
<?php
require( "lib/zip.lib.php" ) ; // Librairie ZIP
$zip = new zipfile () ; // On crée une instance zip
// Liste des fichiers à compresser
$files = array ( 'monrep/doc1.doc' , 'monrep/doc2.doc' , 'monrep/doc3.doc' ) ;
$i = 0 ;
while ( count( $files ) > $i ) {
$fo = fopen($files[$i],'r') ; // On ouvre le fichier
$contenu = fread($fo, filesize($files[$i])) ; // On enregistre le contenu
fclose($fo) ; // On ferme fichier
$zip->addfile($contenu, $files[$i]) ; // On ajoute le fichier
$i++; // On incrémente i
}
$archive = $zip->file() ; // On associe l'archive
// On enregistre l'archive dans un fichier
$open = fopen( 'monrepertoire/monfichier.zip' , "wb");
fwrite($open, $archive);
fclose($open);
?>
Cette dernière partie permet de compresser un fichier et de l'envoyer à l'internaute :
<?php
$archive = $zip->file()
// Code à insérer à la place des 3 lignes ( fopen, fwrite, fclose )
header('Content-Type: application/x-zip') ; //on détermine les en-tête
header('Content-Disposition: inline; filename=monfichier.zip') ;
echo $archive ;
?>