PHP将文件夹打包成zip压缩包
有些虚拟空间没有控制面板在线打包的功能,这里使用PHP打包某个目录为zip,直接在浏览器执行即可打包,直接上代码
formatMicotime(microtime());
$this->rootDir = str_replace('\\','/',getcwd());
$this->openExclude = $openExclude;
$zipDir = $this->rootDir .'/'.$dist;
$this->listDirs($zipDir);
if( empty($this->files) ) throw new ErrorException('打包失败,需要打包的文件为空');
//实例化zip类
$zip = new ZipArchive();
//打开压缩包 新建或写
$zipRes = $zip->open($zipFile,ZipArchive::CREATE | ZipArchive::OVERWRITE );
if( $zipRes !== true ) throw new ErrorException('zip文件打开失败,错误代码:'.$this->zipErrorMsg($zipRes));
$addRes = [];//添加压缩文件状态
foreach ($this->files as $v){
//把文件添加到压缩包里
$res = $zip->addFile($v,str_replace($this->rootDir,'',$v));
$addRes[]=$res;
}
//关闭资源
$zip->close();
$etime = $this->formatMicotime(microtime());
if( count($addRes) ) {
echo '打包成功,成功打包:'.count($addRes).' 个文件;运行时间:'.round($etime-$stime,2).' S';
} else {
echo '打包失败';
}
}
/**
* 遍历所有文件
* @param $dir
*/
public function listDirs($dir){
$dirRes = opendir($dir);
while( false !== ($file = readdir($dirRes)) ){
if( in_array($file,['.','..'])) continue;
$realFile = $dir.$file;
//如果是文件夹,则递归 / 这个不能少
if( is_dir($realFile) ){
$this->listDirs($realFile.'/');
} else {
if( $this->openExclude ){
//排除压缩文件不添加
$excludeArr = ['zip','tar','gz','ara','7z'];
//分隔文件,用于查询文件后缀
$tmpArr = (explode('.',$realFile));
if( count($tmpArr) >1 ){
//获取文件的后缀
$ext = strtolower($tmpArr[count($tmpArr)-1]);
//排除指定后缀的文件
if( in_array($ext,$excludeArr) ) continue;
}
}
//添加到文件列表中
$this->files[] = $realFile;
}
}
}
/**
* 错误提示
* @param $code
* @return mixed|string
*/
protected function zipErrorMsg($code){
$errorCode = array(
4=>'Seek error',
5=>' Read error',
9=>'No such file.',
10=>'File already exists.',
11=>'Can\'t open file.',
14=>'Malloc failure.',
18=>'Invalid argument.',
19=>'Not a zip archive.',
21=>'Zip archive inconsistent',
);
return array_key_exists($code,$errorCode) ? $errorCode[$code] : '未知错误';
}
/**
* 格式化 时间戳和微秒数
* @param $microtime
* @return mixed
*/
protected function formatMicotime($microtime){
list($usec,$sec) = explode(' ',$microtime);
return $sec+$usec;
}
}
try{
//需要打包zip的目录
$dist = './';
//打包后的zip文件名称
$zipFile = 'web.zip';
//实例化类
$zip = new zip();
//开始打包zip
$zip->index($dist ,$zipFile);
}catch (Exception $e){
exit($e->getMessage());
}
使用方法
把代码复制,保存到一个PHP文件里,例如放置到根目录下: /zip.php ,最后在浏览器运行文件 www.dcr163.cn/zip.php 即可。
记得修改代码里的: $dist 和 $zipFile 为自己的文件夹目录。
海报
0 条评论
128
相关文章
本站已关闭游客评论,请登录或者注册后再评论吧~