php上传压缩包并解压(PHP文件夹打包成zip压缩包)
有些虚拟空间没有控制面板在线打包的功能,这里使用PHP打包某个目录为zip,直接在浏览器执行即可打包,直接上代码,今天小编就来聊一聊关于php上传压缩包并解压?接下来我们就一起去研究一下吧!
php上传压缩包并解压
PHP将文件夹打包成zip压缩包有些虚拟空间没有控制面板在线打包的功能,这里使用PHP打包某个目录为zip,直接在浏览器执行即可打包,直接上代码
<?php
/**
* php zip压缩文件夹
* Author: Dcr163
* Date: 2021/09/07
* Time: 09:33
*/
class zip{
public $files = []; //添加到zip中的文件
public $rootDir = ''; //当前工作目录
public $openExclude = ''; //是否开启过滤指定后缀
/**
* 文件夹打包成zip
* @param $dist 需要打包的目录
* @param $zipFile 打包的文件名
* @throws ErrorException
*/
public function index($dist,$zipFile,$openExclude=false){
if( !class_exists('ZipArchive') ) throw new ErrorException('ZipArchive 扩展未启用');
$stime = $this->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 为自己的文件夹目录。
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com