123 votes

Télécharger plusieurs fichiers sous forme de fichier zip en utilisant php

Comment puis-je télécharger plusieurs fichiers sous forme de fichier zip en utilisant php ?

231voto

cletus Points 276888

Vous pouvez utiliser le ZipArchive pour créer un fichier ZIP et le transmettre au 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 de le diffuser :

header('Content-Type: application/zip');
header('Content-disposition: attachment; filename='.$zipname);
header('Content-Length: ' . filesize($zipname));
readfile($zipname);

La deuxième ligne force le navigateur à présenter une boîte de téléchargement à l'utilisateur et lui demande le nom nom de fichier.zip. La troisième ligne est facultative mais certains navigateurs (principalement les plus anciens) ont des problèmes dans certains cas sans que la taille du contenu soit spécifiée.

43voto

Sun Love Points 85

Voici un exemple concret 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();

1voto

Priyank Bolia Points 3825

Créer un fichier zip, puis télécharger le fichier, en définissant l'en-tête, lire le contenu du zip et sortir le fichier.

http://www.php.net/manual/en/function.ziparchive-addfile.php

http://php.net/manual/en/function.header.php

1voto

Abdel Olakara Points 11016

Vous pouvez utiliser la librairie xip.lib.php Class. zip.lib.php Par exemple, consultez cette page article

1voto

dev.mraj Points 189

Vous êtes prêt à faire avec php zip lib, et vous pouvez aussi utiliser la librairie zend zip,

<?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 la librairie php pear pour cela http://www.php.net/manual/en/class.ziparchive.php

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X