该方法使用PHP的自带类 ZipArchive
来实现压缩文件的创建和添加,从而实现单文件或多文件的压缩
类官方文档:
https://www.php.net/manual/zh/class.ziparchive.php
参考文字地址:
https://blog.csdn.net/qq_33858250/article/details/80586370
单文件/多文件压缩
<?php
/**
* 基础的文件压缩
* 扩展
* 压缩文件下载
* 指定目录压缩
* 流程封装
*/
$zip = new ZipArchive();
$path = [
'./demo.txt',
'./l.php',
];
$fileName = 'testZip.zip';
// 打开一个指定位置的压缩包,如果不存在则创建
if ($zip->open($fileName, ZIPARCHIVE::CREATE)!==TRUE) {
exit("cannot open <$filename>\n");
}
// 单文件压缩
// $zip->addFile($path,basename($path));
// 多文件压缩, 循环添加文件
foreach ($path as $k => $file){
$zip->addFile($file, basename($file));
}
// 获取压缩包内文件数量
echo "压缩包文件数量:".$zip->numFiles . "\r\n";
// 关闭压缩包
$zip->close();
echo "执行完成";
指定目录压缩
<?php
function addFileToZip($path, $zip)
{
$handler = opendir($path); //打开当前文件夹由$path指定。
while (($filename = readdir($handler)) !== false) {
if ($filename != "." && $filename != "..") {//文件夹文件名字为'.'和‘..’,不要对他们进行操作
if (is_dir($path . "/" . $filename)) {// 如果读取的某个对象是文件夹,则递归
addFileToZip($path . "/" . $filename, $zip);
} else { //将文件加入zip对象
$zip->addFile($path . "/" . $filename);
}
}
}
@closedir($path);
}
$zip = new ZipArchive();
if ($zip->open('./rsa.zip', ZipArchive::CREATE) === TRUE) {
addFileToZip("./zipTest/", $zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
$zip->close(); //关闭处理的zip文件
}