这里使用PHP扩展的ZipArchive类,在使用之前要将php.ini文件中的zlib.output_compression设置为On
代码如下:
public function addFileToZip($path, $current, $zip) {
// 打开文件夹资源
$handler = opendir($path);
// 循环读取文件夹内容
while(($filename = readdir($handler)) !== false) {
// 过滤掉Linux系统下的.和..文件夹
if ($filename != '.' && $filename != '..') {
// 文件指针当前位置指向的如果是文件夹,就递归压缩
if (is_dir($path.'http://www.likecs.com/'.$filename)) {
$this->addFileToZip($path.'http://www.likecs.com/'.$filename, $filename, $zip);
}else {
// 为了在压缩文件的同时也将文件夹压缩,可以设置第二个参数为文件夹/文件的形式,文件夹不存在自动创建压缩文件夹
$zip->addFile($path.'http://www.likecs.com/'.$filename, $current.'http://www.likecs.com/'.$filename);
}
}
}
@closedir($handler);
}
$zipName = 'your zip file path';
// 如果压缩文件不存在,就创建压缩文件
if (! is_file($zipName)) {
$fp = fopen($zipName, 'w');
fclose($fp);
}
$zip = new \ZipArchive();
// OVERWRITE选项表示每次压缩时都覆盖原有内容,但是如果没有那个压缩文件的话就会报错,所以事先要创建好压缩文件
// 也可以使用CREATE选项,此选项表示每次压缩时都是追加,不是覆盖,如果事先压缩文件不存在会自动创建
if ($zip->open($zipName, \ZipArchive::OVERWRITE) === true) {
$current = 'uplaods/'; // 你要压缩的文件的主目录
$compress->addFileToZip($path, $current, $zip);
$zip->close();
}else {
exit('下载失败!');
}