जवाबों:
आप ZipArchive
जिप फाइल बनाने और क्लाइंट को स्ट्रीम करने के लिए क्लास का उपयोग कर सकते हैं । कुछ इस तरह:
$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();
और इसे स्ट्रीम करने के लिए:
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename='.$zipname);
header('Content-Length: ' . filesize($zipname));
readfile($zipname);
दूसरी पंक्ति ब्राउज़र को उपयोगकर्ता के लिए एक डाउनलोड बॉक्स पेश करने के लिए मजबूर करती है और नाम filename.zip का संकेत देती है। तीसरी पंक्ति वैकल्पिक है, लेकिन कुछ (मुख्यतः पुराने) ब्राउज़रों के कुछ मामलों में सामग्री आकार निर्दिष्ट किए बिना समस्याएँ हैं।
$zip = new ZipArchive;
इसके बजाय नहीं होना चाहिए $zip = new ZipFile;
?
यह PHP में ZIP बनाने का एक कार्यशील उदाहरण है:
$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();
एक ज़िप फ़ाइल बनाएँ, फिर फ़ाइल को डाउनलोड करें, हेडर सेट करके, ज़िप सामग्री पढ़ें और फ़ाइल को आउटपुट करें।
http://www.php.net/manual/en/function.ziparchive-addfile.php
आप php zip lib के साथ करने के लिए तैयार हैं, और 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/
और इसके लिए php नाशपाती lib है http://www.php.net/manual/en/class.ziparchive.php