我有一个文件 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)。
由于
答案 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)
}
}
我没有尝试代码,但只是调试了一点我猜