Comment puis-je télécharger plusieurs fichiers sous forme de fichier Zip en utilisant php?
Vous pouvez utiliser la classe ZipArchive
pour créer un fichier Zip et le diffuser sur le client. Quelque chose comme:
$files = array('readme.txt', 'test.html', 'image.gif');
$zipname = 'file.Zip';
$Zip = new ZipArchive;
$Zip->open($zipname, ZipArchive::CREATE);
foreach ($files as $file) {
$Zip->addFile($file);
}
$Zip->close();
et pour le diffuser:
header('Content-Type: application/Zip');
header('Content-disposition: attachment; filename='.$zipname);
header('Content-Length: ' . filesize($zipname));
readfile($zipname);
La deuxième ligne oblige le navigateur à présenter une boîte de téléchargement à l'utilisateur et invite le nom filename.Zip. La troisième ligne est facultative, mais certains navigateurs (principalement les plus anciens) rencontrent parfois des problèmes sans que la taille du contenu soit spécifiée.
Voici un exemple pratique de création de ZIP en PHP:
$Zip = new ZipArchive();
$Zip_name = time().".Zip"; // Zip name
$Zip->open($Zip_name, ZipArchive::CREATE);
foreach ($files as $file) {
echo $path = "uploadpdf/".$file;
if(file_exists($path)){
$Zip->addFromString(basename($path), file_get_contents($path));
}
else{
echo"file does not exist";
}
}
$Zip->close();
Vous êtes prêt à faire avec php Zip lib, et vous pouvez aussi utiliser zend Zip lib,
<?PHP
// create object
$Zip = new ZipArchive();
// open archive
if ($Zip->open('app-0.09.Zip') !== TRUE) {
die ("Could not open archive");
}
// get number of files in archive
$numFiles = $Zip->numFiles;
// iterate over file list
// print details of each file
for ($x=0; $x<$numFiles; $x++) {
$file = $Zip->statIndex($x);
printf("%s (%d bytes)", $file['name'], $file['size']);
print "
";
}
// close archive
$Zip->close();
?>
http://devzone.zend.com/985/dynamically-creating-compressed-Zip-archives-with-php/
et il y a aussi php pearl lib pour cette http://www.php.net/manual/fr/class.ziparchive.php
Créez un fichier Zip, puis téléchargez-le en définissant l'en-tête, lisez le contenu du fichier Zip et exportez-le.
http://www.php.net/manual/en/function.ziparchive-addfile.php