簡體   English   中英

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

[英]How can I read a .tar.gz file with PHP?

我正在建立一個供人們上傳PHP中的.tar(和.tar.gz,.tar.bz2,.zip等)文件的系統。 上載文件是可以的,但是在上載檔案之后,我想列出檔案中包含的文件。

有人可以推薦一個可以讀取文件存檔的優秀PHP庫嗎?

我在Pear上找到了File_Archive ,但是幾年來沒有更新。 ZipArchive非常適合.zip文件,但是我需要一些可以處理更多文件類型的文件。

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

您可以使用PharData類執行此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擴展

以下代碼讀取.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擴展名才能使此代碼正常工作。

不要嘗試自己構建它。 使用現有的類(例如http://pear.php.net/package/Archive_Tar)為您處理該類。

我認為第一個答案行不通。 否則它對我不起作用。 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文件。

使用zlib擴展

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM