Unduh banyak file sebagai file zip menggunakan php

112

Bagaimana cara mengunduh banyak file sebagai file zip menggunakan php?

Zoe
sumber
Anda dapat menggunakan lib Kelas xip.lib.php. zip.lib.php Sebagai contoh, lihat artikel
Abdel Raoof

Jawaban:

212

Anda dapat menggunakan ZipArchivekelas untuk membuat file ZIP dan mengalirkannya ke klien. Sesuatu seperti:

$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();

dan untuk mengalirkannya:

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

Baris kedua memaksa browser untuk menampilkan kotak unduhan kepada pengguna dan meminta nama filename.zip. Baris ketiga adalah opsional tetapi browser tertentu (terutama yang lebih lama) memiliki masalah dalam kasus tertentu tanpa ukuran konten yang ditentukan.

cletus
sumber
4
Bukankah seharusnya $zip = new ZipArchive;bukan $zip = new ZipFile;?
Matthieu
@ Matthieu Tanda kurung tidak diperlukan. Lihat contoh: php.net/manual/en/ziparchive.open.php
Lars Gyrup Brink Nielsen
1
Apa yang dimaksud dengan variabel $ zipfilename?
Pascal Klein
$ zipfilename harus membaca $ zipname - itu adalah nama file dari zip yang dibuat sebagai string.
Chris
1
Ini tidak berfungsi di pembuka zip default windows tetapi berfungsi di win zipper atau 7-zip. Saya mencoba menambahkan gambar dalam folder zip dan kemudian mengunduh sebagai zip
RN Kushwaha
36

Ini adalah contoh kerja pembuatan ZIP di 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();
Sun Love
sumber
2
Jawaban ini berhasil! Perbedaannya adalah addFromString, addFile memiliki kode yang buruk.
André Catita
1

Anda siap menggunakan php zip lib, dan juga dapat menggunakan 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/

dan ada juga php pear lib untuk http://www.php.net/manual/en/class.ziparchive.php ini

dev.meghraj.dll
sumber