2011-02-02 21 views
11

PHPで.tar(と.tar.gz、.tar.bz2、.zipなど)ファイルをアップロードするシステムを構築しています。ファイルをアップロードするのは問題ありませんが、アップロード後にアーカイブに含まれているファイルを一覧表示したいと思います。PHPで.tar.gzファイルを読むにはどうしたらいいですか?

誰かがファイルアーカイブを読むことができる良いPHPライブラリをお勧めしますか?

私はFile_Archiveを梨で見つけましたが、それは数年後に更新されていません。 ZipArchiveは.zipファイルに最適ですが、より多くのファイルタイプを処理できるものが必要です。

更新私はRHEL6、PHP 5.2、およびApache 2.2で動作しています。

+0

実行中のオペレーティングシステムは? – RobertPitt

+2

@RobertPitt RHEL6はRed Hat Enterprise Linuxバージョン6を意味します – Abadis

答えて

21

を使用してください:あなたが持っていない場合は

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

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

これはさえphar://ストリームラッパーで動作しますPharの場合は、PHP-only implementationまたはthe pecl extensionを確認してください。

+0

は、特定のタイプのタールに問題があるようですhttp://stackoverflow.com/questions/37189687/phardata-class-fails-when-tar-contents-has-relative-paths – artfulrobot

2

はあなたがPharDataクラスでこれを行うことができzlib延長

+0

zlib拡張機能はTARファイルを処理しますか? – Michael

+1

いいえ、gz圧縮/解凍のみを処理します。あなたはすでにあなたの問題のタール側を扱うためのより良い答えを持っています。 –

3

自分で作成しないでください。それを処理するには、http://pear.php.net/package/Archive_Tarのような既存のクラスを使用します。

+0

Archive_Tarは圧縮ファイルを処理しますか?また、ドキュメントでは、.tarファイル内のファイルのリストを提供できるとは言えません。私はファイルを抽出したくない、私はちょうど彼らの内容をリストしたい。 – Michael

+1

@Michael:はい、.gzと.bz2の両方の圧縮をサポートしています。また、 ' - > listContent'メソッドがあります。 – mario

4

次のコードは、あなたが動作するように、このコードのために有効にPHPのZIPの拡張子を持っている必要があります.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"); 
    ?> 

内のファイルを読み込みます。

+0

優れています。これは私を助けた。 – anastymous

1

私は最初の回答がうまくいかないと思います。それとも、私にとってはうまくいかない。あなたがそれを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ファイルで使用できます。

関連する問題