<?php
class MakeZip
{
/**
* 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壓縮包
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.