PHP Conference Japan 2024

PharData::decompress

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

PharData::decompress解压缩整个 Phar 归档文件

描述

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

对于基于 tar 的归档文件,此方法会解压缩整个归档文件。

对于基于 Zip 的归档文件,此方法会抛出异常而失败。必须启用 zlib 扩展才能解压缩使用 gzip 压缩的归档文件,并且必须启用 bzip2 扩展才能解压缩使用 bzip2 压缩的归档文件。

此外,此方法会自动重命名归档文件的扩展名,默认为 .tar。或者,可以使用 extension 参数指定文件扩展名。

参数

extension

对于解压缩,默认文件扩展名是 .tar。使用此参数指定其他文件扩展名。请注意,只有可执行归档文件才能在其文件名中包含 .phar

返回值

成功时返回一个 PharData 对象,失败时返回 null

错误/异常

如果 zlib 扩展不可用,或 bzip2 扩展未启用,则抛出 BadMethodCallException

变更日志

版本 描述
8.0.0 extension 现在可以为空。

示例

示例 #1 一个 PharData::decompress() 示例

<?php
$p
= new PharData('/path/to/my.tar.gz');
$p->decompress(); // 创建 /path/to/my.tar
?>

参见

添加注释

用户贡献的注释 1 条注释

pttlens at gmail dot com
6 年前
如果文件名包含多个点(.),您可以通过以下代码(示例 1)保留其他部分。

示例 #1(预期)
<?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); # 结果文件名:abc.xyz.tar
?>

示例 #2(可能出乎意料)
<?php
$filename
= "abc.xyz.tar.gz";
$p = new PharData($filename);
$p->decompress($filename); # 结果文件名:abc.tar;xyz意外被截断。
?>
To Top