如何使用PHP解压缩包含另一个zip文件的zip文件

时间:2018-02-22 09:38:35

标签: php zip unzip

我有一个文件 xyz.zip ,在这个文件中还有两个文件 test.xml 和另一个 abc.zip 文件包含 test2.xml 。当我使用此代码时,它只提取 xyz.zip 文件。但我还需要提取 abc.zip

xyz.zip
  - test.xml
  - abc.zip
  - test2.xml

<?php
$filename = "xzy.zip";
$zip = new ZipArchive;
if ($zip->open($filename) === TRUE) {
        $zip->extractTo('./');
        $zip->close();
        echo 'Success!';
}
else {
        echo 'Error!';
}
?>

有人可以告诉我如何在zip文件中提取所有内容?甚至abc.zip。这样输出就会在一个文件夹中(test.xml和test2.xml)。

由于

2 个答案:

答案 0 :(得分:0)

这可能对你有帮助。

此函数将使用ZipArchive类压缩zip文件。

它将提取zip中的所有文件并将它们存储在单个目标目录中。也就是说,不会创建任何子目录。

<?php
// dest shouldn't have a trailing slash
function zip_flatten ( $zipfile, $dest='.' )
{
    $zip = new ZipArchive;
    if ( $zip->open( $zipfile ) )
    {
        for ( $i=0; $i < $zip->numFiles; $i++ )
        {
            $entry = $zip->getNameIndex($i);
            if ( substr( $entry, -1 ) == '/' ) continue; // skip directories

            $fp = $zip->getStream( $entry );
            $ofp = fopen( $dest.'/'.basename($entry), 'w' );

            if ( ! $fp )
                throw new Exception('Unable to extract the file.');

            while ( ! feof( $fp ) )
                fwrite( $ofp, fread($fp, 8192) );

            fclose($fp);
            fclose($ofp);
        }

                $zip->close();
    }
    else
        return false;

    return $zip;
}

/*
How to use:

zip_flatten( 'test.zip', 'my/path' );
*/
?> 

答案 1 :(得分:0)

你应该使用一个递归函数来检查所有提取的文件,如果发现其中一个是zip,那么再次调用它自己。

<div class="initial-load-animation">
  <div class="linkedin-image"></div>
  <div class="loading-bar">
    <div class="blue-bar"></div>
  </div>
</div>


@keyframes initial-loading {
  0%, 100% {
    transform: translate(-34px,0)
    }
  50% {
    transform: translate(96px,0)
    }
}

我没有尝试代码,但只是调试了一点我猜