Thursday, September 11, 2008

zip and stream file with php

I've wrote the function to zip the files and stream out

//$filesToStream : can be array or just file string.
//$dir : directory of file
function zipAndStream($filesToStream,$dir){
  $file = 'tempfile'.rand(9999,1000).".zip";
  $zip = new ZipArchive;
  $res = $zip->open( $file , ZIPARCHIVE::OVERWRITE );
  if ($res === TRUE && file_exists($dir.'/'.$filename) ) {
    if(is_array ($filesToStream)){
      $filecount=0;
      foreach($filesToStream as $filetostream){
        $zip->addFile($dir.'/'.$filetostream,$filetostream);
        $filecount++;
        $filename = substr($filetostream,0,strrpos($filetostream,'.'));
      }
      if($filecount!=1){
        $filename = 'files';
      }
    }else{
      $zip->addFile($filedir.'/'.$filestostream,$filestostream);
      $filename = substr($filestostream,0,strrpos($filestostream,'.'));
    }
    $zip->close();
    header("Content-Type: application/zip");
    header("Content-Length: " . filesize($file));
    header("Content-Disposition: attachment; filename=\"".$filename.".zip\"");
    readfile($file);
  } else {
    listfile();
  }
  unlink($file);
}
to verify that your host server has zip extension try this
if(!extension_loaded('zip'))print_r('

ZIP Extension Is Disable

');