web-dev-qa-db-fra.com

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?

99
user213559

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.

196
cletus

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();
28
Sun Love

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

1
dev.meghraj

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

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

1
Priyank Bolia