php压缩文件,php打包下载,PHP创建ZIP档案文件技巧 
            
            
                今天在做THINKPHP项目中下载的时候需要将多个文件合并到一个压缩包里面再下载! 
以前没有做这种的压缩. 
于是查了一下php压缩文件,PHP创建ZIP相关关键词 
今天用到的并改了一下,php文件打包函数: 
[php]
/**
	 * 文件打包,将文件加入zip中
	 **/
	public function addZip($file, $filename = null, $zipName = null){
		$zip = new ZipArchive();
		$root = $_SERVER["DOCUMENT_ROOT"];
		if (!$zipName){
			$zipName = './Public/Uploads/Download/'.time().'.zip';
		}
		if (!file_exists($zipName)){
			if ($zip->open($zipName,ZIPARCHIVE::CREATE) !== TRUE){
				exit('无法打开文件,或者文件创建失败');
			}
		}else{
			if ($zip->open($zipName, ZIPARCHIVE::OVERWRITE) !== TRUE){
				exit('无法打开'.$zipName.'文件');
			}
		}
		//dump($zipName);
		/**判断是是否数组**/
		if (is_array($file)){
			//dump($file);
			foreach ($file as $k=>$v){
				$zip->addFile($v,basename(strrchr($v,'/')));
			}
		}else{
			if (!$filename){
				$filename = strrchr($file,'/');
			}
			$zip->addFile($v,basename($filename));
		}
		
		$zip->close();
		if(!file_exists($zipName)){  
			exit("无法找到文件"); //即使创建,仍有可能失败。。。。  
		}
		return $zipName;
	}
public function downloadfile($filepath, $newfilename = null, $unlink = null) {
		$filename = $filepath;
		if (!is_file($filename)){
			$this->error('文件'.$filename.'已经被管理员删除!');
		}
		if (!$newfilename){
			$newfilename = strrchr($filepath, '/');
		}
		$ua = $_SERVER["HTTP_USER_AGENT"];
		$encoded_filename = urlencode($newfilename);
		$encoded_filename = str_replace("+", "%20", $encoded_filename);
		header('Content-Type: application/octet-stream');
		if (preg_match("/MSIE/", $ua)) {
			header('Content-Disposition: attachment; filename="' . $encoded_filename . '"');
		} else
			if (preg_match("/Firefox/", $ua)) {
				header('Content-Disposition: attachment; filename*="utf8''' . $newfilename . '"');
			} else {
				header('Content-Disposition: attachment; filename="' . $newfilename . '"');
			}
		$fp = fopen($filename, 'rb');
		fpassthru($fp);
		fclose($fp);
		
		if ($unlink) {
			unlink($filename);
		}
	}
[/php]
这里因为是新生成的zip文件,对其它用户没有用,同时这个内容也是变化的,所以最后我们下载过后删除了zip文件