php多个不同目录打包到指定zip压缩文件
程序员文章站
2022-03-07 16:40:37
php多文件夹打包压缩首先安装ZipArchive扩展,具体安装方法百度一下,或者直接看官方文档ZipArchive官方文档直接上代码,简单的调用/* * 文件夹打包 * */ public static function addFileToZip($path,$zip) { $handler = opendir($path); //打开当前文件夹由$path指定。 while (($filename = readdir($hand...
php多文件夹打包压缩
首先安装ZipArchive扩展,具体安装方法百度一下,或者直接看官方文档
直接上代码,简单的调用
/*
* 文件夹打包
* */
public static function addFileToZip($path,$zip)
{
$handler = opendir($path); //打开当前文件夹由$path指定。
while (($filename = readdir($handler)) !== false) {
if ($filename != "." && $filename != "..") {//文件夹文件名字为'.'和‘..',不要对他们进行操作
if (is_dir($path . "/" . $filename)) {// 如果读取的某个对象是文件夹,则递归
self::addFileToZip($path . "/" . $filename, $zip);
} else { //将文件加入zip对象
$zip->addFile($path . "/" . $filename);
}
}
}
}
/*
* 文件夹打包,直接调用这个就行了
* param array $paths 需要打包的目录绝对路径,一维数组传多个目录,比如['/imgs/test1/','/imgs/test2','...']
* param $filename 保存的绝对路径文件名称。比如/data/tmp/test.zip
* */
public static function dirToZip($paths,$filename)
{
$zip = new \ZipArchive();
try {
if ($zip->open($filename, $zip::CREATE) == TRUE) {
foreach ($paths as $path){
self::addFileToZip($path, $zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
}
$zip->close(); //关闭处理的zip文件
}
if(file_exists($filename)){
return ['code'=>200,'url'=>$filename,'msg'=>'success'];
}
return ['code'=>-200,'msg'=>'打包失败'];
} catch (\Exception $e) {
return ['code'=>-200,'msg'=>$e->getMessage()];
}
}
外部只需要简单调用dirToZip方法就行了
---- $paths可以是多个目录,用数组分开
本文地址:https://blog.csdn.net/hzthis/article/details/107488086