php 遍历文件夹并压成zip_PHP-ZIP压缩文件

基于昨天的内容安装完了zip扩展之后,于是着手开始写代码了。

代码是网上搬砖过来的,应为之前并没有做过这类的程序。

搬完一运行,响应success~?NO!!!发现并没有这么简单,去目录一看我的压缩文件呢?

接下来的工作就是去理解代码里函数的作用了,

先提出自己花半天时间学习得重点:

1.实例化类(基于TP5.0开发类名前面加'\')

$zip = new \ZipArchive;

2.创建压缩文件

(同时也是打开压缩文件,[\ZipArchive::CREATE] 常量的意思是如果不存在则创建)

$zip->open($zipName,\ZipArchive::CREATE);

3.将需要压缩的目录及文件添加进压缩资源中

$zip->addEmptyDir(文件夹路径);

$zip->addFile(文件路径,文件重命名[其实就是将文件指定放入哪个目录]);

4.释放资源

$zip->close();

下面就是我自己根据自己需要改出来的代买,如果你觉得对你有用就拿去吧,顺手给个赞就行:

public function zip_play(){

try{

//重复压缩,则会自动覆盖

$res = $this->zip('D:\sys.evcs.hygmgroup.com\runtime\log','D:\sys.evcs.hygmgroup.com\runtime\chargelog.zip');

if(!$res){

throw new Exception('压缩失败');

}else{

return "success";

}

}catch (Exception $e){

echo $e->getMessage();

}

}

/**

* description:主方法:生成压缩包

* @author: MY

* @param $dir_path 想要压缩的目录:如 './demo/'

* @param $zipName 压缩后的文件名:如 './folder/demo.zip'

* @return string

*/

public function zip($dir_path, $zipName)

{

$relationArr = array(

$dir_path => array(

'originName' => $dir_path,

'is_dir' => true,

'children' => array()

)

);

$this->modifiyFileName($dir_path, $relationArr[$dir_path]['children']);

$key = array_keys($relationArr);

$val = array_values($relationArr);

$zip = new \ZipArchive;

//ZIPARCHIVE::CREATE没有即是创建

$zip->open($zipName,\ZipArchive::CREATE);

$this->zipDir($key[0], '', $zip, $val[0]['children']);

$zip->close();

return true;

}

/**

* [zipDir 给zip文件添加目录及文件]

* @param [type] $real_path [根目录]

* @param [type] $zip_path [压缩目录]

* @param [type] &$zip [引入zip资源]

* @param [type] $relationArr [参数变量]

* @return [type] [description]

*/

function zipDir($real_path, $zip_path, &$zip, $relationArr)

{

$sub_zip_path = empty($zip_path) ? '' : $zip_path . '/';

if (is_dir($real_path)) {

foreach ($relationArr as $k => $v) {

if ($v['is_dir']) { //是文件夹

$zip->addEmptyDir($sub_zip_path . $v['originName']);

$this->zipDir($real_path . '/' . $k, $sub_zip_path . $v['originName'], $zip, $v['children']);

} else { //不是文件夹

$zip->addFile($real_path . '/' . $k, $sub_zip_path . $k);

}

}

}

}

/**

* [modifiyFileName 遍历目录下所有文件夹及文件]

* @param [type] $path [需要压缩的目录路径]

* @param [type] &$relationArr [引入参数变量]

* @return [type] [无]

*/

function modifiyFileName($path, &$relationArr){

if (!is_dir($path) || !is_array($relationArr)) {

return false;

}

if ($dh = opendir($path)) {

$count = 0;

while (($file = readdir($dh)) !== false) {

if(in_array($file,array('.', '..', null))) continue; //无效文件,重来

if (is_dir($path . '/' . $file)) {

$relationArr[$file] = array(

'originName' => iconv('GBK', 'UTF-8', $file),

'is_dir' => true,

'children' => array()

);

$this->modifiyFileName($path . '/' . $file, $relationArr[$file]['children']);

}else{

$relationArr[$file] = array(

'originName' => iconv('GBK', 'UTF-8', $file),

'is_dir' => false,

'children' => array()

);

}

}

}

}

你可能感兴趣的:(php,遍历文件夹并压成zip)