使用PHP,如何识别(解压缩,如果适用),并从.tar,.gz,.tar.gz,.zip文件中提取文件?

时间:2015-06-18 03:50:06

标签: php archive phar

我知道\Phar\PharData存在,但我到目前为止他们提供的方法遇到了一些麻烦。在确定哪个Phar*::method()用于尝试提取存档并对其包含的文件进行处理之前,我仍然需要通过任何方式检测mime类型/文件类型。

是否有一个可以包含的“简单按钮”类(可能是通过作曲家提供的一些软件包)可以在非常高的级别处理这个问题?或者我到目前为止没有正确使用Phar和朋友或者需要重新RTM?

基本上,我想要执行以下操作(这是我现在控制的CLI脚本,所以安全性虽然对于这类事情很重要,但现在仍然在后面):

  1. 检测某个文件可能是某种存档。
  2. 验证似乎是以下之一:.tar.gz.tar.gz.zip
  3. 如果是,请尝试提取存档,然后解析其实际文件的内容。
  4. 我是否有一个“简单按钮”,我不知道,或者我是否需要构建一些逻辑,尽可能猜测它可能是什么类型的存档,然后尝试使用适当的Phar*方法试图提取它的文件并做我需要的任何工作吗?

    我希望我的写作方式有道理。如果有人已基本完成了所有这些,我试图避免重新发明这个迷你项目的轮子。

2 个答案:

答案 0 :(得分:0)

如果您不需要纯PHP,并且您的代码在Linux机器上运行,那么

exec('uncompress [-cfv] [file...]');

exec('unzip filename.zip -d destination');

将提取文件并使其可用于php。 当然,您需要检查扩展名(zip,tar等)才能调用正确的命令

答案 1 :(得分:0)

所以,在继续研究这个问题的同时,我最终在google搜索结果中看到了我自己的(这个)SO问题,这让我很生气。所以,万一有人偶然发现这个寻找一个好的解决方案,我已经通过搜索https://packagist.org/search/?q=archive找到了一对(见图):

其中一些似乎很有希望。

<强> wapmorgan / UnifiedArchive:

<强>炼金术/比比

<强> zetacomponents /存档

  • zetacomponents/Archive (packagist)
  • zetacomponents/Archive (github source)

    特色(乍一看):

    • 似乎是一个纯粹的PHP实现?如果是这样,那就太棒了。
    • 最近更新于15天前,所以它是我提到的三个中最活跃的。
    • 似乎由一个组织维护而不是一个人。
    • 它包含了到目前为止在packagist上的最多下载量(当搜索&#34;存档&#34;时),虽然我还没有使用它,但是这个&#39;通常是一个好兆头。

免责声明:在撰写本文时,我实际上只尝试了wapmorgan/UnifiedArchive,到目前为止,它正是我所寻找的。

无论如何,我希望这可以帮助任何可能偶然发现这个问题的人。