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.readonly 设置为 0 才能对 Phar 对象起作用。否则,将抛出 PharException

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

对于基于 Zip 的 phar 归档文件,此方法会抛出异常而失败。要使用 gzip 压缩进行压缩,必须启用 zlib 扩展,要使用 bzip2 压缩进行压缩,必须启用 bzip2 扩展。与所有修改 phar 内容的功能一样,phar.readonly INI 变量必须关闭才能成功。

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

参数

compression

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

extension

默认情况下,扩展名为 .phar.gz.phar.bz2(用于压缩 phar 归档文件),以及 .phar.tar.gz.phar.tar.bz2(用于压缩 tar 归档文件)。对于解压缩,默认文件扩展名为 .phar.phar.tar

返回值

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

错误/异常

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

变更日志

版本 描述
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 个说明

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