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文件