ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

thinkphp文件夹生成zip压缩包

2026/8/4 7:52:07 拓冰建站 浏览量
thinkphp文件夹生成zip压缩包

一、准备工作,使用phpinfo()查看有没有zip扩展

<?php
echo phpinfo();
?>

Thinkphp使用PHP自带的ZipArchive压缩文件或文件夹
在这里插入图片描述显示enabled 说明已经配置好

如果没有安装扩展的,请参照以下方法:

1、下载对应版本的扩展包:https://windows.php.net/downloads/pecl/releases/zip/1.20.0/,比如我是php7.4(window7_64位系统),则下载如下:
在这里插入图片描述Thinkphp使用PHP自带的ZipArchive压缩文件或文件夹

2、把解压的php_zip.dll文件放到php-5.6.27-nts/ext目录

3、在php.ini添加以下配置:

extension=php_zip.dll

4、重启Apache

二、在控制器中使用

//文件夹打包
public function zip()
{$local = app()->getRootPath().'\public';try {//文件夹目录$dirPath = $local."\demo";//zip压缩包保存路径$zipPath = $local."\demo.zip";//创建zip实例$zip=new \ZipArchive();if($zip->open($zipPath, \ZipArchive::CREATE|\ZipArchive::OVERWRITE)=== TRUE) {//调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法$this->addFileToZip($zip,$dirPath,$dirPath);//关闭处理的zip文件$zip->close();}}catch (\Exception $e) {//echo '压缩失败';halt($e);}//echo '压缩成功';$this->downloadZip($zipPath);
}//下载function
public function downloadZip($zipPath)
{$zipPath = iconv("UTF-8", "GBK", $zipPath);//加这行中文文件夹也ok了header("Cache-Control: public");header("Content-Description: File Transfer");header('Content-disposition: attachment; filename=' . basename($zipPath)); //文件名header("Content-Type: application/zip"); //zip格式的header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件header('Content-Length: ' . filesize($zipPath)); //告诉浏览器,文件大小@readfile($zipPath);//ob_end_clean();@unlink(app()->getRootPath().'public/'.$zipPath);//删除压缩包
}//压缩包追加文件
public function addFileToZip($zip,$path,$root){$handler=opendir($path); //打开当前文件夹while(($filename=readdir($handler))!==false){if($filename != "." && $filename != ".."){//不操作名字为'.'和'..'的文件夹或文件if(is_dir($path."/".$filename)){// 如果读取的某个对象是文件夹,则递归$this->addFileToZip($zip,$path."/".$filename,$root);}else{//将文件加入zip对象,第二个参数是zip里文件的路径$pathFilename=$path . "/" . $filename;$zip->addFile($pathFilename, str_replace($root.'/','',$pathFilename));}}}//@closedir($path);
}

小伙伴们,以上亲测有效,记得关注