php ZipArchive 压缩整个文件夹 - 自带ZipArchive类 - PHP递归创建目录压缩包

Posted Rudon滨海渔村

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php ZipArchive 压缩整个文件夹 - 自带ZipArchive类 - PHP递归创建目录压缩包相关的知识,希望对你有一定的参考价值。

效果

保持目录结构,压缩整个文件夹为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

封面

更多 (凑字数专用)

看名字就知道,RecursiveIteratorIterator是个递归迭代器,其后可选带四个参数(只能任一)

RecursiveIteratorIterator::LEAVES_ONLY
默认,已在__construct中设定使用
作用是去枝留叶,跳过空节点,只递归取实值
举例就是
1.递归文件夹取文件时跳过文件夹本身,只取文件夹下面的文件,输出的项全部是file(文件和各级子文件夹的文件)
2.多维数组就跳过前几维的key,而取value,输出的每一项都不是array
3.XML只取值(text),不输出节点名,当然还要视乎你设定获取xml什么内容

RecursiveIteratorIterator::SELF_FIRST
各项都包含,例如递归文件夹就会连同子文件夹名称也作为其中项输出,顺序是先父后子

RecursiveIteratorIterator::CHILD_FIRST
同上,但顺序是先子后父,./test/test.php会在./test(文件夹)前面

RecursiveIteratorIterator::CATCH_GET_CHILD
未明,测试结果和LEAVES_ONLY一样,估计是只取子项。

以上是关于php ZipArchive 压缩整个文件夹 - 自带ZipArchive类 - PHP递归创建目录压缩包的主要内容,如果未能解决你的问题,请参考以下文章

PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载 && Linux下的ZipArchive配置开启压缩

php ZipArchive压缩文件

php使用ZipArchive压缩文件的心得

PHP 生成压缩包,PHP多个文件合并成压缩包,PHP压缩包, PHP ZipArchive thinkphp 将多个文件合并成压缩包

PHP下载压缩包文件

PHP扩展类ZipArchive实现压缩Zip文件和文件打包下载