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 文件中。最后,我们可以像上面所示一样使用该函数来创建指定目录下的压缩文件。