php 压缩zip文件,php压缩Zip文件和文件打包下载

namespace app\util;/**

* 关于文件压缩和下载的类

* @author panzhide

* @version 1.0*/

classZipDownload

{protected $file_path;/**

* 构造函数

* @param [string] $path [传入文件目录]*/

public function __construct($path)

{$this->file_path = $path; //要打包的根目录

}/**

* 入口调用函数

* @return [type] [以二进制流的形式返回给浏览器下载到本地]*/

public functionindex()

{$zip = new\ZipArchive();$end_dir = $this->file_path . date(‘Ymd‘, time()) . ‘.zip‘; //定义打包后的包名

$dir = $this->file_path;if (!is_dir($dir)) {mkdir($dir);

}if ($zip->open($end_dir, \ZipArchive::CREATE) === TRUE) { ///ZipArchive::OVERWRITE 如果文件存在则覆盖

$this->addFileToZip($dir, $zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法

$zip->close();

}if (!file_exists($end_dir)) {exit("无法找到文件");

}return $end_dir;//header("Cache-Control: public");

// header("Content-Description: File Transfer");

// header("Content-Type: application/zip"); //zip格式的

// header(‘Content-disposition: attachment; filename=‘ . basename($end_dir)); //文件名

// header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件

// header(‘Content-Length:‘ . filesize($end_dir)); //告诉浏览器,文件大小

// @readfile($end_dir);

// $this->delDirAndFile($dir, true); //删除目录和文件

// unlink($end_dir); 删除压缩包

}/**

* 文件压缩函数 需要开启php zip扩展

* @param [string] $path [路径]

* @param [object] $zip [扩展ZipArchive类对象]*/

protected function addFileToZip($path, $zip)

{$handler = opendir($path);while (($filename = readdir($handler)) !== false) {if ($filename != "." && $filename != "..") {if (!is_dir($filename)) {$zip->addFile($path . "/" . $filename, $filename); //第二个参数避免将目录打包,可以不加

}

}

}

@closedir($path);

}/**

* 删除文件函数

* @param [string] $dir [文件目录]

* @param boolean $delDir [是否删除目录]

* @return [type] [description]*/

protected function delDirAndFile($path, $delDir = true)

{$handle = opendir($path);if ($handle) {while (false !== ($item = readdir($handle))) {if ($item != "." && $item != "..") {if (is_dir($path . ‘/‘ . $item)) {$this->delDirAndFile($path . ‘/‘ . $item, $delDir);

}else{unlink($path . ‘/‘ . $item);

}

}

}

@closedir($handle);if ($delDir) {return rmdir($path);

}

}else{if (file_exists($path)) {return unlink($path);

}else{return FALSE;

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值