扫盲 2026.10.07 11:36 48 次浏览 0 条评论

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

行思随记

欢迎来到:行思随记