php 从zip创建平面目录

gxwragnw  于 2023-02-15  发布在  PHP
关注(0)|答案(1)|浏览(135)

在我的控制器中,我收到ZIP文件,其中可能包含xml和嵌套的多级zip文件。如何创建平面目录,其中只包含从所有zip文件递归提取的xml文件?

lp0sw83n

lp0sw83n1#

为了简单起见,我建议创建一个临时目录,将ZIP解压到该目录:

$zip = new ZipArchive;
if ($zip->open('test.zip') === TRUE) {
    $zip->extractTo('tmp');
    $zip->close();
    
} else {
    echo 'failed';
}

然后可能是一个递归函数来迭代所有文件。

function recursiveDirectoryIterator($path){
    $out = [];
    foreach(glob($path . "/*") as $entry){ 
         if ( is_dir($entry) ) {
             $sub = recursiveDirectoryIterator($entry);
             foreach($sub as $subEntry){ $out[] = $subEntry; }
         } else {
              $out[] = $entry;
         }
    }
    return $out;
}

然后,使用以下命令完成:

foreach(recursiveDirectoryIterator("tmp") as $file){ 
        if ( !rename ( $file , getcwd() . basename($file) ) {
            echo 'Failed to rename: ' . $file . ' to ' . getcwd() . basename($file) . '<br>';
        }  
    }

如果你有多个嵌套的ZIP压缩包,只需修改这个方法。2也许创建了一个key =〉value的压缩包列表,例如:

$archive['imagePack1'] = "tmp/archive1.zip";
$archive['imagePack2'] = "tmp/archive2.zip"

foreach($archive as $key => $path){
    $zip = new ZipArchive;
    if ($zip->open('tmp/' . $path) === TRUE) {
        $zip->extractTo('tmp/' . $key);
        $zip->close();

     } else {
        echo 'failed';
     }
}

相关问题