在 php 中处理档案

Posted

技术标签:

【中文标题】在 php 中处理档案【英文标题】:handling archives in php 【发布时间】:2013-02-25 20:01:19 【问题描述】:

我正在为网站开发一个可分发的框架(一种淡化的 CMS),它有一个用于添加插件的模块系统。我将使用上传的档案来安装这些模块,并且我想允许使用 zip、bzip、gzip、rar 和 tar。我做了一些谷歌搜索,知道其中一些文件类型可以由 zlib 扩展或 ZipArchive 处理,但是,我不清楚这些包中的任何一个是否支持这些允许的文件类型的解包。我还研究了一些用于处理档案的 3rd 方类(主要是 pclzip),但大多数是几年前发布的,最近没有更新。我不确定现在应该如何处理以及这些包的工作方式是否存在差异。如果有人能对这个主题有更多的了解,我将非常感激。

【问题讨论】:

【参考方案1】:

很难为所有这些找到库。最简单的方法是使用system() 运行相关实用程序来提取提供的文件类型。

【讨论】:

【参考方案2】:

是的,它们确实如此,并且对于所有提到的存档类型都存在扩展名(请参阅:http://www.php.net/manual/en/refs.compression.php)。正如 Mark 所描述的,对于使用二进制工具的大规模解压缩操作,可能会更快——尽管没有进行基准测试。

这里有一个关于如何使用 ZipArchive 的示例,请参阅其他文档:

$z = new \ZipArchive();
if ($z->open("/some/path/the.zip") === true) 

    // extract all
    $z->extractTo("/some/path/output/folder");

    // extract by rel path
    if (($c = $z->getFromName("some/file/in/zip.txt")) !== false) 
        file_put_contents("/tmp/my-file.txt", $c);
    

    // iterate all, print index: name
    for ($i = 0; $i < $z->numFiles; $i++) 
        $info = $z->statIndex($i);
        echo "File #$i: ". $info['name']. ' ('. $info['size']. " size)\n";
    
    $z->close();

不同的界面有点烦人。您可能想使用包装器,有几个:https://packagist.org/search/?q=archive

【讨论】:

以上是关于在 php 中处理档案的主要内容,如果未能解决你的问题,请参考以下文章

结业生档案怎么处理?

1月7日 档案处理。

有人可以解释这个从档案中提取特定文件的批处理代码吗

MySql 发布档案。处理需要保留的大量存档帖子的最佳方法是啥?

使用 Hadoop Streaming 和 MapReduce 处理来自 CommonCrawl 的许多 WARC 档案

快速提取大量小tar档案