php创建含文件夹的zip文件

    这两天工作需要,要将不同日期上传的图片打包成zip下载,网上找了好多列子,都不能生成含目录结构的zip包,经过认真研究,终于搞定了。网上所谓的将文件夹压缩成zip文件,仅仅是将文件夹中所有文件提取进行打包,无法生成含目录结构的zip文件,好了不说了,上代码:

1、首先php要支持zip

配置:extension=php_zip.dll,不再过多叙述,

2、压缩文件:开始和网上多数例子相同,但注意核心是$zip->addFile()的使用,第二个参数是放在压缩包中的文件名称,所以这里直接将文件的相对路径作为文件的包内名称,然后就惊喜的发现zip包内文件夹出现了

$fileName = $tmpPath.$fileName;
if(!file_exists($fileName)){
//重新生成文件
$zip = new ZipArchive();//使用本类,linux需开启zlib,windows需取消php_zip.dll前的注释
if ($zip->open($fileName, ZIPARCHIVE::CREATE)!==TRUE) {
exit('无法打开文件,或者文件创建失败');
}
$datalist=list_dir($tmpPath);
foreach($datalist as $val){
if(file_exists($val)){

$zip->addFile($val, str_replace($tmpPath, '', $val));

}
}
$zip->close();//关闭
}


//获取文件列表
function list_dir($dir){
$result = array();
if (is_dir($dir)){
$file_dir = scandir($dir);
foreach($file_dir as $file){
if ($file == '.' || $file == '..'){
continue;
}
elseif (is_dir($dir.$file)){
$result = array_merge($result, list_dir($dir.$file.'/'));
}
else{
array_push($result, $dir.$file);
}
}
}
return $result;
}

以上,希望对遇到同样问题的同学能有所帮助

原文地址:https://www.cnblogs.com/YearsOfDrunk/p/9581497.html