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