Unduh banyak file sebagai file zip menggunakan php


112

Bagaimana cara mengunduh banyak file sebagai file zip menggunakan php?


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.


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

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.