2024 年 PHP 日本研討會

PharData::compress

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

PharData::compress使用 Gzip 或 Bzip2 壓縮來壓縮整個 tar/zip 封存檔

說明

公開 PharData::compress(整數 $compression, ?字串 $extension = null): ?PharData

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

對於 zip 封存檔,這個方法會因例外狀況而失敗。必須啟用 zlib 擴充套件才能使用 gzip 壓縮,必須啟用 bzip2 擴充套件才能使用 bzip2 壓縮。

此外,這個方法會自動重新命名封存檔,附加 .gz.bz2 或移除副檔名(如果傳入 Phar::NONE 以移除壓縮)。或者,可以使用第二個參數指定檔案副檔名。

參數

compression

壓縮方式必須是 Phar::GZPhar::BZ2 其中之一以新增壓縮,或是 Phar::NONE 以移除壓縮。

extension

預設情況下,壓縮 tar 檔的副檔名是 .tar.gz.tar.bz2,解壓縮 tar 檔的副檔名是 .tar

回傳值

成功時會回傳一個 PharData 物件,失敗時則回傳 null

錯誤/例外

如果 zlib 擴充套件不可用,或 bzip2 擴充套件未啟用,則會擲出 BadMethodCallException 例外。

更新日誌

版本 說明
8.0.0 extension 現在可以為 null。

範例

範例 #1 PharData::compress() 範例

<?php
$p
= new PharData('/path/to/my.tar');
$p['myfile.txt'] = 'hi';
$p['myfile2.txt'] = 'hi';
$p1 = $p->compress(Phar::GZ); // 複製到 /path/to/my.tar.gz
$p2 = $p->compress(Phar::BZ2); // 複製到 /path/to/my.tar.bz2
$p3 = $p2->compress(Phar::NONE); // 例外:/path/to/my.tar 已存在
?>

另請參閱

新增註記

使用者貢獻的註記 2 則註記

Christopher Marshall
8 年前
這是一個非常惱人的錯誤。不過,您可以使用以下方法來解決它

$data = 'some.test.string';
$phar = new PharData('test.tar');

$phar->compress(Phar::GZ, substr($data, strpos($data, '.') + 1));
c6h1206free at gmail dot com
8 年前
這個方法會破壞檔名中第一個點號之後的所有內容,並將其替換為 zip 副檔名(.tar.gz 等)

範例

<?php

$tarfile
= "2.5.0.0-RC1.tar";
$pd = new \PharData($tarfile);
$pd->buildFromDirectory("/path/to/contents");
$pd->compress(\Phar::GZ);

?>

最終會得到一個名為 "2.tar.gz" 的檔案
To Top