2024 年 PHP 日本大会

Phar::compress

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

Phar::compress使用 Gzip 或 Bzip2 压缩整个 Phar 存档

描述

public Phar::compress(int $compression, ?string $extension = null): ?Phar

注意:

此方法需要 php.ini 设置 phar.readonly0 才能对 Phar 对象起作用。否则,将抛出 PharException

对于基于 tar 和基于 phar 的 phar 存档,此方法使用 gzip 压缩或 bzip2 压缩来压缩整个存档。生成的 文件可以使用 gunzip 命令/bunzip 命令进行处理,或者可以直接使用 Phar 扩展透明地访问。

对于基于 Zip 的 phar 存档,此方法将引发异常。必须启用 zlib 扩展才能使用 gzip 压缩,必须启用 bzip2 扩展才能使用 bzip2 压缩。与所有修改 phar 内容的功能一样,phar.readonly INI 变量必须关闭才能成功。

此外,此方法会自动重命名存档,追加 .gz.bz2 或如果传递 Phar::NONE 来删除压缩则删除扩展名。或者,可以使用第二个参数指定文件扩展名。

参数

compression

压缩必须是 Phar::GZPhar::BZ2 之一以添加压缩,或者 Phar::NONE 以删除压缩。

extension

默认情况下,phar 存档的扩展名为 .phar.gz.phar.bz2,tar 存档的扩展名为 .phar.tar.gz.phar.tar.bz2。对于解压缩,默认文件扩展名是 .phar.phar.tar

返回值

返回一个 Phar 对象,或者在失败时返回 null

错误/异常

如果 phar.readonly INI 变量已打开,zlib 扩展不可用,或者 bzip2 扩展未启用,则抛出 BadMethodCallException

变更日志

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

示例

示例 #1 一个 Phar::compress() 示例

<?php
$p
= new Phar('/path/to/my.phar', 0, 'my.phar');
$p['myfile.txt'] = 'hi';
$p['myfile2.txt'] = 'hi';
$p1 = $p->compress(Phar::GZ); // 复制到 /path/to/my.phar.gz
$p2 = $p->compress(Phar::BZ2); // 复制到 /path/to/my.phar.bz2
$p3 = $p2->compress(Phar::NONE); // 异常:/path/to/my.phar 已存在
?>

参见

添加注释

用户贡献的注释 1 条注释

1
mike at eyesis dot ca
13 年前
对于那些想要小型压缩 PHAR 存档的好处,但又不想承受性能损失的人,请在将文件添加到存档时使用 php_strip_whitespace。如果您的代码有很多空格、docbocks 和单行注释,此函数可以大大减小存档大小而不会造成性能损失。

<?php
$sDir
= 'application';
$oPhar = new Phar ('app.phar');

$oDir = new RecursiveIteratorIterator (new RecursiveDirectoryIterator ($sDir), RecursiveIteratorIterator::SELF_FIRST);

foreach (
$oDir as $sFile) {
if (
preg_match ('/\\.php$/i', $sFile) ) {
$oPhar->addFromString (substr ($sFile, strlen ($sDir) + 1), php_strip_whitespace ($sFile));
}
}
?>
To Top