php 自动打包ZIP目录代码
//循环打包目录
<?php
function addFileToZip($path, $zip) {
$handler = opendir($path); //打开当前文件夹由$path指定。
while (($filename = readdir($handler)) !== false) {
if ($filename != "." && $filename != "..") {//文件夹文件名字为'.'和‘..’,不要对他们进行操作
if (is_dir($path . "/" . $filename)) {// 如果读取的某个对象是文件夹,则递归
addFileToZip($path . "/" . $filename, $zip);
} else { //将文件加入zip对象
$zip->addFile($path . "/" . $filename);
}
}
}
@closedir($path);
}
$info = opendir('./');
while (($file = readdir($info)) !== false) {
if(is_dir($file)){
if (strcmp($file, ".") == 0 ||
strcmp($file, "..") == 0) {
continue; }
$zip = new ZipArchive();
$file1= './'.$file;
try {
$zip->open($file1.'.zip', ZipArchive::CREATE);
addFileToZip($file1, $zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
$zip->close(); //关闭处理的zip文件
} catch (\Exception $exception) {
return $exception->getMessage();
}
}
}
closedir($info);
//文件打包
$zip = new ZipArchive; //首先实例化这个类
if ($zip->open('test.zip') === TRUE) { //然后查看是否存在test.zip这个压缩包
$zip->addFile('too.php');
$zip->addFile('test.php'); //将too.php和test.php两个文件添加到test.zip压缩包中
$zip->close(); //关闭
echo 'ok';
} else {
echo 'failed';
}
//目录打包
function addFileToZip($path, $zip) {
$handler = opendir($path);
while (($filename = readdir($handler)) !== false) {
if ($filename != "." && $filename != "..") {
if (is_dir($path . "/" . $filename)) {
addFileToZip($path . "/" . $filename, $zip);
} else {
$zip->addFile($path . "/" . $filename);
}
}
}
closedir($handler);
}
function createZipArchive($dir) {
$zip = new ZipArchive();
$zipFileName = basename($dir) . '.zip';
if ($zip->open($zipFileName, ZipArchive::CREATE) === true) {
addFileToZip($dir, $zip);
$zip->close();
return $zipFileName;
} else {
return false;
}
}
// Usage:
$dirPath = '/path/to/directory';
createZipArchive($dirPath);```上面的代码中,我们首先定义了 `addFileToZip()` 函数来递归地将指定目录下的所有文件和子目录添加到 zip 文件中。然后我们使用新的 `createZipArchive()` 函数来创建 zip 文件并调用 `addFileToZip()` 函数将文件添加到 zip 文件中。最后,我们可以像上面所示一样使用该函数来创建指定目录下的压缩文件。
