PHP Conference Japan 2024

Phar::compress

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

Phar::compress使用 Gzip 或 Bzip2 壓縮來壓縮整個 Phar 封存

說明

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

注意事項:

此方法需要將 php.ini 設定檔中的 phar.readonly 設定為 0 才能作用於 Phar 物件。否則,將會拋出 PharException 例外。

對於基於 tar 和 phar 的壓縮檔,此方法使用 gzip 壓縮或 bzip2 壓縮來壓縮整個檔案。產生的檔案可以用 gunzip 命令/bunzip 命令處理,或者直接使用 Phar 擴充套件透明地存取。

對於基於 Zip 的壓縮檔,此方法會因例外而失敗。必須啟用 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 現在可以為 null。

範例

範例 #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` 函式。如果您的程式碼包含大量的空白、文件區塊和單行註釋,這個函式可以大幅減少封存檔的大小,而不會影響效能。

<?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