php ZipArchive 压缩整个文件夹 - 自带ZipArchive类 - PHP递归创建目录压缩包
效果
保持目錄結(jié)構(gòu),壓縮整個文件夾為zip包
?
完整代碼
<?php/*** 壓縮整個文件夾為zip文件*/ function make_zip_file_for_folder ($zip_path = '', $folder_path = '') {// Get real path for our folder$rootPath = realpath($folder_path);// Initialize archive object$zip = new ZipArchive();$zip->open($zip_path, ZipArchive::CREATE | ZipArchive::OVERWRITE);// Create recursive directory iterator/** @var SplFileInfo[] $files */$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($rootPath),RecursiveIteratorIterator::LEAVES_ONLY);foreach ($files as $name => $file){// Skip directories (they would be added automatically)if (!$file->isDir()){// Get real and relative path for current file$filePath = $file->getRealPath();$relativePath = substr($filePath, strlen($rootPath) + 1);// Add current file to archive$zip->addFile($filePath, $relativePath);}}// Zip archive will be created only after closing object$zip->close(); }使用方法
$zip_file = '/var/www/abc.zip';
$zip_dir?= '/var/www/abc/';
make_zip_file_for_folder($zip_file, $zip_dir);
思路
RecursiveIteratorIterator 遞歸獲取文件樹(列表)
$zip->addFile($filePath, $relativePath);? 逐個添加文件到zip壓縮包
感謝
代碼來自大佬:https://www.cnblogs.com/eleven24/p/10836407.html
封面
更多 (湊字數(shù)專用)
看名字就知道,RecursiveIteratorIterator是個遞歸迭代器,其后可選帶四個參數(shù)(只能任一)
RecursiveIteratorIterator::LEAVES_ONLY
默認,已在__construct中設定使用
作用是去枝留葉,跳過空節(jié)點,只遞歸取實值
舉例就是
1.遞歸文件夾取文件時跳過文件夾本身,只取文件夾下面的文件,輸出的項全部是file(文件和各級子文件夾的文件)
2.多維數(shù)組就跳過前幾維的key,而取value,輸出的每一項都不是array
3.XML只取值(text),不輸出節(jié)點名,當然還要視乎你設定獲取xml什么內(nèi)容
RecursiveIteratorIterator::SELF_FIRST
各項都包含,例如遞歸文件夾就會連同子文件夾名稱也作為其中項輸出,順序是先父后子
RecursiveIteratorIterator::CHILD_FIRST
同上,但順序是先子后父,./test/test.php會在./test(文件夾)前面
RecursiveIteratorIterator::CATCH_GET_CHILD
未明,測試結(jié)果和LEAVES_ONLY一樣,估計是只取子項。
總結(jié)
以上是生活随笔為你收集整理的php ZipArchive 压缩整个文件夹 - 自带ZipArchive类 - PHP递归创建目录压缩包的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SNMP基本介绍
- 下一篇: SNMP网络管理协议