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

发布于 2024-10-16 03:18:23 字数 337 浏览 3 评论 0原文

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

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

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

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

I am building a system for people to upload .tar (and .tar.gz, .tar.bz2, .zip, etc) files in PHP. Uploading the files is fine, but I would like to list files contained in the archive after it has been uploaded.

Can someone recommend a good PHP library that can read file archives?

I found File_Archive on Pear but it hasn't been updated in a few years. ZipArchive works great for .zip files, but I need something that can handle more file types.

update I'm running on RHEL6, PHP 5.2, and Apache 2.2.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

心作怪 2024-10-23 03:18:23

您可以使用 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 实现,或pecl 扩展

You can do this with the PharData class:

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

This even works with the phar:// stream wrapper:

$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');

If you don't have Phar, check the PHP-only implementation, or the pecl extension.

梦中楼上月下 2024-10-23 03:18:23

不要尝试自己构建这个。使用诸如 http://pear.php.net/package/Archive_Tar 之类的现有类来处理该问题为你。

Don't try to build this yourself. Use an existing class like http://pear.php.net/package/Archive_Tar to handle that for you.

香草可樂 2024-10-23 03:18:23

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

The below code reads a file inside a .gz zip file

    <?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");
    ?>

Note that you need to have the zip extension of php enabled for this code to work.

把回忆走一遍 2024-10-23 03:18:23

我认为第一个答案不起作用。或者它只是对我不起作用。 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 文件。

I don't think the first answer works. Or it only doesn't work for me. You could not read file content when you foreach it. I give my working code below.

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

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

This works for gz, zip, tar and bz files.

滥情稳全场 2024-10-23 03:18:23

使用 zlib 扩展

Use the zlib extension

混吃等死 2024-10-23 03:18:23

坚持使用原始的 tar 库(如果预先安装)怎么样?

echo shell_exec('tar -tf <path/to/file.tgz>');// lists the contents of a Gzipped Tarball

How about sticking with the original tar library (if pre-installed)?

echo shell_exec('tar -tf <path/to/file.tgz>');// lists the contents of a Gzipped Tarball
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文