last time we use ziparchive but now
we'll use zip library from phpmyadmin
and never store data on server
function zipAndStream($filestostream,$dir,$flag=0){ require_once("zip.lib.php"); // from phpmyadmin $zip = new zipfile(); if(is_array ($filestostream)){ foreach($filestostream as $filetostream){ $filename = $dir."/".$filetostream; $fsize = @filesize($filename); $fh = fopen($filename, 'rb', false); $filedata = fread($fh, $fsize); $zip->addFile($filedata,$filename); $filecount++; $filenamefull = $filetostream; $filename = substr($filetostream,0,strrpos($filetostream,'.')); } if($filecount!=1){ $filename = $filecount.'files'; } }else{ $filename = $dir."/".$filestostream; $fsize = @filesize($filename); $fh = fopen($filename, 'rb', false); $filedata = fread($fh, $fsize); $zip->addFile($filedata,$filename); $filecount++; $filename = substr($filestostream,0,strrpos($filestostream,'.')); } $zipcontents = $zip->file(); if($flag==1){ $imagefile = "php.png"; $filesize = strlen($zipcontents)+filesize($imagefile); header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=\"".$filecount."files_".$imagefile."\""); header("Content-length: " . $filesize . "\n\n"); readfile($imagefile); }elseif($flag==-1){ header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=\"".$filenamefull."\""); header("Content-length: " . strlen($filedata) . "\n\n"); echo $filedata; exit; }else{ header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=\"".$filename.".zip\""); header("Content-length: " . strlen($zipcontents) . "\n\n"); } echo $zipcontents; }