2012-02-23 9 views
23

純粋なPHPを使用してexec('tar')やその他のコマンドを使用せずにファイルをuntar-gzするにはどうすればよいですか?PHP unnt-gzをexec()しないでください?

私の問題は次のとおりです。私は26メガバイトのtar.gzファイルを私のサーバーにアップロードして抽出する必要があります。 net2ftpを使って解凍しようとしましたが、アップロード後にtar.gzの解凍をサポートしていません。

私は無料のウェブホストを使用しているため、exec()コマンドは許可されず、プロンプトへのアクセスも許可されません。では、どうすればこのことをやめるのでしょうか?

PHPにはコマンドが組み込まれていますか?

答えて

37

PHP 5.3.0以来、Archive_Tarを使用する必要はありません。

tarアーカイブで作業する新しいクラスがあります:The PharData classです。

try { 
    $phar = new PharData('myphar.tar'); 
    $phar->extractTo('/full/path'); // extract all files 
} catch (Exception $e) { 
    // handle errors 
} 

をそして、あなたはtar.gz形式のアーカイブを持っている場合は、単に(PharData::decompress()を使用して)抽出する前にそれを解凍:

アーカイブを展開するには(ZipArchive::extractTo()のように動作PharData::extractTo()を使用して)

// decompress from gz 
$p = new PharData('/path/to/my.tar.gz'); 
$p->decompress(); // creates /path/to/my.tar 

// unarchive from the tar 
$phar = new PharData('/path/to/my.tar'); 
$phar->extractTo('/full/path'); 
+1

何らかの理由でPharData :: extractToがWindowsのPHP 5.4.0で動作しません。理由はわかりません – TinyGrasshopper

+0

[あなたの質問](http://stackoverflow.com/q/13870800/569101)を見ましたが、私はそれをテストするために5.4.0のWindowsを持っていません、ごめんなさい。 – j0k

+0

また、ドキュメントとは異なり、第2引数としてディレクトリを使用していないようです。 –

3

PEARには、それぞれzlibとbz2拡張がロードされている場合、GzipとBZ2の両方の圧縮をサポートするArchive_Tar classが用意されています。

関連する問題