PHP压缩打包文件思路
压缩打包说白了就是把这些文件塞进一个 zip 里,PHP 自带的 ZipArchive 类就够用,不用装什么第三方库,前提是 php.ini 里把 zip 扩展打开。
核心就三步:new 一个 ZipArchive 对象,open 创建压缩包,然后把文件一个个 addFile 塞进去,最后 close 收尾。addFile 第二个参数是压缩包里显示的路径,这点很关键,不传的话会把服务器上的完整路径带进去,解压出来一堆没用的目录层级,看着就烦。
整个目录要打包就得递归,遇到文件夹先 addEmptyDir 补一个空目录,不然解压出来文件夹是缺的。
<?php
$zip = new ZipArchive();
// CREATE 没有就建,OVERWRITE 有就覆盖
if ($zip->open('backup.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE) !== true) {
exit('创建失败,检查目录有没有写权限');
}
function addDir($zip, $dir, $base = '') {
foreach (scandir($dir) as $f) {
if ($f === '.' || $f === '..') continue;
$path = $dir . '/' . $f;
$local = $base . $f; // 压缩包内的相对路径
if (is_dir($path)) {
$zip->addEmptyDir($local); // 文件夹先占个位
addDir($zip, $path, $local . '/');
} else {
$zip->addFile($path, $local);
}
}
}
addDir($zip, './data');
$zip->close();
echo '打包完了';
几个坑记一下:路径统一用正斜杠,别用反斜杠;文件多又大容易超时,记得 set_time_limit(0);打包目录要有写权限,不然 open 直接返回 false,别以为是代码写错了。
说点什么 0