अपने वेब सर्वर लिनक्स चल रहा है, तो आप इसे एक अस्थायी फ़ाइल उत्पन्न जा रहा है बिना स्ट्रीमिंग कर सकते हैं। Win32 के तहत आपको सिगविन या कुछ समान उपयोग करने की आवश्यकता हो सकती है।
यदि आप ज़िप फ़ाइल नाम के रूप में "-" का उपयोग करते हैं, तो यह stdout को संपीड़ित करेगा। वहां से, popen() का उपयोग करके उस स्ट्रीम को रीडायरेक्ट करना काफी आसान है। "-q" तर्क बस सामान्य रूप से स्थिति पाठ को आउटपुट करने के लिए ज़िप को बताता है। अधिक जानकारी के लिए ज़िप (1) मैनपेज देखें।
<?
$zipfilename = "zip_file_name.zip";
if(isset($files)) unset($files);
$target = "/some/directory/of/files/you/want/to/zip";
$d = dir($target);
while(false !== ($entry = $d->read()))
{
if(substr($entry, 0, 1) != "." && !is_dir($entry))
{
$files[] = $entry;
}
}
header("Content-Type: application/x-zip");
header("Content-Disposition: attachment; filename=\"$zipfilename\"");
$filespec = "";
foreach($files as $entry)
{
$filespec .= "\"$entry\" ";
}
chdir($target);
$stream = popen("/usr/bin/zip -q - $filespec", "r");
if($stream)
{
fpassthru($stream);
fclose($stream);
}
?>
इस सवाल का जवाब यहाँ है: http://stackoverflow.com/a/4357904/416630 – Lee