【问题标题】:How can I read a .tar.gz file with PHP?如何使用 PHP 读取 .tar.gz 文件?
【发布时间】:2011-02-02 19:14:48
【问题描述】:

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

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

我在 Pear 上找到了File_Archive,但它已经有几年没有更新了。 ZipArchive 非常适合 .zip 文件,但我需要可以处理更多文件类型的东西。

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

【问题讨论】:

  • 你运行的是什么操作系统?
  • @RobertPitt RHEL6 表示 Red Hat Enterprise Linux 版本 6

标签: php zip tar


【解决方案1】:

您可以使用 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

【讨论】:

【解决方案2】:

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

【讨论】:

  • Archive_Tar 是否处理压缩文件?并且文档没有说它可以提供 .tar 文件中的文件列表。我不想提取文件,我只想列出它们的内容。
  • @Michael:是的,它同时支持 .gz 和 .bz2 压缩。还有一个->listContent 方法等等。
【解决方案3】:

以下代码读取 .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 扩展才能使此代码正常工作。

【讨论】:

  • 优秀。这对我有帮助。
【解决方案4】:

我认为第一个答案不起作用。或者它只对我不起作用。当你 foreach 时你无法读取文件内容。我在下面给出我的工作代码。

$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 文件。

【讨论】:

    【解决方案5】:

    使用zlib 扩展名

    【讨论】:

    • zlib 扩展是否处理 TAR 文件?
    • 不,它只处理 gz 压缩/解压缩。您已经有了更好的答案来处理问题的焦油方面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多