扫盲 2026.11.09 17:56 6 次浏览 0 条评论

PHP压缩打包文件思路

PHP 打包压缩最省事的就是内置的 ZipArchive 类,不用装第三方库,前提是 php.ini 里 zip 扩展开着。

思路就四步:建包、往里塞文件、关包、该下载下载该保存保存。目录要递归扫,包内路径必须自己拼,不然后面解压出来一片绝对路径。

$zip = new ZipArchive();
$file = 'pack.zip';
// CREATE 没有就建,OVERWRITE 有就覆盖
if ($zip->open($file, 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, './upload');
$zip->close(); // 不关包文件是坏的

几个坑:addFile 第二个参数是包内路径,别省;文件多的时候先 set_time_limit(0);打包完一定要 close。

标签:PHP,ZipArchive,文件打包

说点什么 0