PHP Conference Nagoya 2025

PharData::decompress

(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL phar >= 2.0.0)

PharData::decompressPhar アーカイブ全体の圧縮を解除する

説明

public PharData::decompress(?string $extension = null): ?PharData

tar 形式のアーカイブの場合は、 このメソッドはアーカイブ全体の圧縮を解除します。

zip 形式のアーカイブの場合は、このメソッドは失敗して例外が発生します。 gzip で圧縮されたファイルの圧縮を解除するためには zlib 拡張モジュールが、そして bzip2 で圧縮されたファイルの圧縮を解除するためには bzip2 拡張モジュールが有効になっていなければなりません。

さらに、このメソッドは自動的にアーカイブの拡張子を変更し、 .tar をデフォルトで追加します。 もうひとつの方法として、ファイルの拡張子を extension パラメータで指定することもできます。

パラメータ

extension

圧縮を解除する場合、デフォルトのファイル拡張子は .tar です。 このパラメータを使用すると、別の拡張子を指定することができます。 実行可能なアーカイブのみが、ファイル名に .phar を含むことができることに注意しましょう。

戻り値

成功した場合に PharData オブジェクトを返します。 失敗した場合は null を返します。

エラー / 例外

zlib 拡張モジュールが使用できない場合、あるいは bzip2 拡張モジュールが使用できない場合に BadMethodCallException をスローします。

変更履歴

バージョン 説明
8.0.0 extension は、nullable になりました。

例1 PharData::decompress() の例

<?php
$p
= new PharData('/path/to/my.tar.gz');
$p->decompress(); // これは、/path/to/my.tar を作成します
?>

参考

add a note

User Contributed Notes 1 note

up
5
pttlens at gmail dot com
6 years ago
If filename contains multiple dots(.), you can preserve other parts by following code (example1).

Example #1 (Expected)
<?php
$filename
= "abc.xyz.tar.gz";
$p = new PharData($filename);
$exts = explode('.', $filename);
array_shift($exts);
array_pop($exts);
$ext = implode('.', $exts);
$p->decompress($ext); # result filename: abc.xyz.tar
?>

Example #2 (might be unexpected)
<?php
$filename
= "abc.xyz.tar.gz";
$p = new PharData($filename);
$p->decompress($filename); # result filename: abc.tar; xyz is truncated accidentally.
?>
To Top