Jawaban:
Anda dapat menggunakan ZipArchive
kelas 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.
$zip = new ZipArchive;
bukan $zip = new ZipFile;
?
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();
Buat file zip, lalu unduh file tersebut, dengan mengatur header, membaca konten zip dan mengeluarkan file tersebut.
http://www.php.net/manual/en/function.ziparchive-addfile.php
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