PHP提取zip [重复]

Posted

技术标签:

【中文标题】PHP提取zip [重复]【英文标题】:PHP extract zip [duplicate] 【发布时间】:2013-04-02 18:42:33 【问题描述】:

我有一个 zip 文件,里面有一些文件和文件夹,我想从 zip 文件中提取文件夹“/files”的内容到指定路径(我的应用程序的根路径)。

如果有一个不存在的文件夹,则应该创建它。

例如,如果 zip 中的路径是:“/files/includes/test.class.php”,则应将其提取到

$path . "/includes/test.class.php"

我该怎么做?

我发现在 zip 文件中切换的唯一功能应该是

http://www.php.net/manual/en/ziparchive.getstream.php

但我实际上不知道如何使用此功能做到这一点。

【问题讨论】:

步骤 1) 阅读 documentation 仅供参考 ZipArchive 将保留目录结构,因此您不必担心。 是的,但我不想将 zip 的根目录提取到我的应用程序的根目录。我想从 zip 中提取“/files”到我的根目录。 是的,但要重申最后一点,有人还在...(你猜对了)文档here 和here 中提到了这一点——我还清楚地记得以前在 *** 上看到过这个问题! 【参考方案1】:

试试这个:

$zip = new ZipArchive;
$archiveName = 'test.zip';
$destination = $path . '/includes/';
$pattern = '#^files/includes/(.)+#';
$patternReplace = '#^files/includes/#';

function makeStructure($entry, $destination, $patternReplace)

    $entry = preg_replace($patternReplace, '', $entry);
    $parts = explode(DIRECTORY_SEPARATOR, $entry);
    $dirArray = array_slice($parts, 0, sizeof($parts) - 1);
    $dir = $destination . join(DIRECTORY_SEPARATOR, $dirArray);
    if (!file_exists($dir)) 
        mkdir($dir, 0777, true);
    
    if ($dir !== $destination) 
        $dir .= DIRECTORY_SEPARATOR;
    
    $fileExtension = pathinfo($entry, PATHINFO_EXTENSION);
    if (!empty($fileExtension)) 
        $fileName = $dir . pathinfo($entry, PATHINFO_BASENAME);
        return $fileName;
    
    return null;


if ($zip->open($archiveName) === true) 
    for ($i = 0; $i < $zip->numFiles; $i++) 
        $entry = $zip->getNameIndex($i);
        if (preg_match($pattern, $entry)) 
            $file = makeStructure($entry, $destination, $patternReplace);
            if ($file === null) 
                continue;
            
            copy('zip://' . $archiveName . '#' . $entry, $file);
        
    
    $zip->close();

【讨论】:

谢谢,但如果我只有这个特定的文件,那就行了,但我想将“/files”的全部内容提取到“/”。 谢谢你,这真的很好用。只是一个小问题。如果 zip 存档中有子文件夹,它们目前不会被复制。有没有办法复制它们,以保持结构?谢谢 如果压缩包中有子文件夹,它们会被创建为一个文件。 @Michael 你想复制文件夹吗?还是只是文件? 给定 zip 文件夹“/files”中的所有内容。【参考方案2】:

我认为您需要 zziplib 扩展才能使其工作

$zip = new ZipArchive;

if ($zip->open('your zip file') === TRUE) 
  //create folder if does not exist
  if (!is_dir('path/to/directory')) 
      mkdir('path/to/directory');
  

  //then extract the zip
  $zip->extractTo('destination to which zip is to be extracted');
  $zip->close();
  echo 'Zip successfully extracted.';
 else 
  echo 'An error occured while extracting.';

阅读此链接了解更多信息http://www.php.net/manual/en/ziparchive.extractto.php

希望这会有所帮助:)

【讨论】:

谢谢,但这不会回答问题。我不想将 zip 的根目录提取到我的应用程序的根目录。我想从 zip 中提取“/files”到我的根目录。 也许这可以帮助你然后***.com/questions/10968359/…

以上是关于PHP提取zip [重复]的主要内容,如果未能解决你的问题,请参考以下文章

从 Python3 中的 .zip 文件中提取和读取 [重复]

如何在php中解压缩zip文件[重复]

从路径中提取目录[重复]

用PHP提取部分字符串[重复]

将 7-zip 库集成到 C#.NET 应用程序中[重复]

使用 PHP 从网页中提取特定数据 [重复]