在php中处理档案

时间:2013-02-25 20:01:19

标签: php compression inflate

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

是的,他们这样做并且对于所有提到的存档类型都存在扩展(请参阅: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