在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1 <?php 2 /** 3 * 关于文件压缩和下载的类 4 * @author tycell 5 * @version 1.0 6 */ 7 class zip_down{ 8 9 protected $file_path; 10 /** 11 * 构造函数 12 * @param [string] $path [传入文件目录] 13 */ 14 public function __construct($path){ 15 $this->file_path=$path; //要打包的根目录 16 } 17 /** 18 * 入口调用函数 19 * @return [type] [以二进制流的形式返回给浏览器下载到本地] 20 */ 21 public function index(){ 22 $zip=new ZipArchive(); 23 $end_dir=$this->file_path.date('Ymd',time()).'.zip';//定义打包后的包名 24 $dir=$this->file_path; 25 if(!is_dir($dir)){ 26 mkdir($dir); 27 } 28 if($zip->open($end_dir, ZipArchive::OVERWRITE) === TRUE){ ///ZipArchive::OVERWRITE 如果文件存在则覆盖 29 $this->addFileToZip($dir, $zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法 30 $zip->close(); 31 } 32 if(!file_exists($end_dir)){ 33 exit("无法找到文件"); 34 } 35 header("Cache-Control: public"); 36 header("Content-Description: File Transfer"); 37 header("Content-Type: application/zip"); //zip格式的 38 header('Content-disposition: attachment; filename='.basename($end_dir)); //文件名 39 header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件 40 header('Content-Length:'.filesize($end_dir)); //告诉浏览器,文件大小 41 @readfile($end_dir); 42 $this->delDirAndFile($dir,true);//删除目录和文件 43 unlink($end_dir);////删除压缩包 44 } 45 /** 46 * 文件压缩函数 需要开启php zip扩展 47 * @param [string] $path [路径] 48 * @param [object] $zip [扩展ZipArchive类对象] 49 */ 50 protected function addFileToZip($path, $zip){ 51 $handler = opendir($path); 52 while (($filename=readdir($handler)) !== false) { 53 if ($filename!= "." && $filename!=".."){ 54 if(!is_dir($filename)){ 55 $zip->addFile($path."/".$filename,$filename); //第二个参数避免将目录打包,可以不加 56 } 59 } 60 } 61 @closedir($path); 62 } 63 /** 64 * 删除文件函数 65 * @param [string] $dir [文件目录] 66 * @param boolean $delDir [是否删除目录] 67 * @return [type] [description] 68 */ 69 protected function delDirAndFile($path,$delDir=true){ 70 $handle=opendir($path); 71 if($handle){ 72 while(false!==($item = readdir($handle))){ 73 if($item!="."&&$item!=".."){ 74 if(is_dir($path.'/'.$item)){ 75 $this->delDirAndFile($path.'/'.$item, $delDir); 76 }else{ 77 unlink($path.'/'.$item); 78 } 79 } 80 } 81 @closedir($handle); 82 if($delDir){return rmdir($path);} 83 }else{ 84 if(file_exists($path)){ 85 return unlink($path); 86 }else{ 87 return FALSE; 88 } 89 } 90 } 91 92 }
|
2022-08-30
2022-08-17
2022-11-06
2022-08-17
2022-08-16
请发表评论