$file) if(!file_exists($file)) unset($files[$name]); if(!count($files)) // no files actually return false; $zip = new ZipArchive(); if(!$zip->open($destination, $overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE)) return false; foreach($files as $name => $file) { $encoded_file_name = fixInZipFilenameEncoding($file); // prevent zip from corrupting cyrillics $zip->addFile($file,$encoded_file_name); } $zip->close(); return $destination; } function send_zip($name) { //# cache-preventing headers to be reviewed header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: private",false); header("Content-Type: application/zip"); header("Content-Disposition: attachment; filename*=UTF-8''".rawurlencode(basename($name)).";"); // see https://stackoverflow.com/q/93551/3995261 header("Content-Length: ".filesize($name)); readfile($name); } $zip = create_zip($files_to_zip,$zip_name,false); if(file_exists($zip_name)) send_zip($zip_name); ?>