如何用PHP读取.tar.gz文件?

时间:2011-02-02 19:14:48

标签: php zip tar

我正在构建一个系统供人们在PHP上传.tar(和.tar.gz,.tar.bz2,.zip等)文件。上传文件很好,但我想列出归档后包含在档案中的文件。

有人可以推荐一个可以读取文件档案的好的PHP库吗?

我在Pear上发现了File_Archive,但是几年后它还没有更新。 ZipArchive非常适合.zip文件,但我需要能够处理更多文件类型的东西。

更新我在RHEL6,PHP 5.2和Apache 2.2上运行。

5 个答案:

答案 0 :(得分:27)

您可以使用PharData类:

执行此操作
// Example: list files
$archive = new PharData('/some/file.tar.gz');
foreach($archive as $file) {
        echo "$file\n";
}

这甚至适用于phar://流包装器:​​

$list = scandir('phar:///some/file.tar.gz');
$fd = fopen('phar:///some/file.tar.gz/some/file/in/the/archive', 'r');
$contents = file_get_contents('phar:///some/file.tar.gz/some/file/in/the/archive');

如果您没有Phar,请查看PHP-only implementationthe pecl extension

答案 1 :(得分:4)

以下代码读取 .gz zip文件

中的文件
    <?php
    $z = gzopen('zipfile.gz','r') or die("can't open: $php_errormsg");
    $string = '';

    while ($line = gzgets($z,1024)) {
        $string .= $line;
    }

    echo $string;

    gzclose($z) or die("can't close: $php_errormsg");
    ?>

注意您需要启用php的zip扩展才能使此代码正常工作。

答案 2 :(得分:3)

不要试图自己构建它。使用像http://pear.php.net/package/Archive_Tar这样的现有类来为您处理。

答案 3 :(得分:2)

使用zlib扩展名

答案 4 :(得分:2)

我不认为第一个答案有效。或者它只对我不起作用。当你预先知道它时,你无法读取文件内容。我在下面提供我的工作代码。

$fh = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator('phar:///dir/file.tar.gz'),
    RecursiveIteratorIterator::CHILD_FIRST
);

foreach ($fh as $splFileInfo) {
    echo file_get_contents($splFileInfo->getPathname());
}

这适用于gz,zip,tar和bz文件。