這是一個非常惱人的錯誤。不過,您可以使用以下方法來解決它
$data = 'some.test.string';
$phar = new PharData('test.tar');
$phar->compress(Phar::GZ, substr($data, strpos($data, '.') + 1));
(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL phar >= 2.0.0)
PharData::compress — 使用 Gzip 或 Bzip2 壓縮來壓縮整個 tar/zip 封存檔
對於 tar 封存檔,這個方法會使用 gzip 或 bzip2 壓縮整個封存檔。產生的檔案可以用 gunzip 命令/bunzip 命令處理,或者使用 Phar 擴充套件直接且透明地存取。
對於 zip 封存檔,這個方法會因例外狀況而失敗。必須啟用 zlib 擴充套件才能使用 gzip 壓縮,必須啟用 bzip2 擴充套件才能使用 bzip2 壓縮。
此外,這個方法會自動重新命名封存檔,附加 .gz
、.bz2
或移除副檔名(如果傳入 Phar::NONE
以移除壓縮)。或者,可以使用第二個參數指定檔案副檔名。
compression
壓縮方式必須是 Phar::GZ
、Phar::BZ2
其中之一以新增壓縮,或是 Phar::NONE
以移除壓縮。
extension
預設情況下,壓縮 tar 檔的副檔名是 .tar.gz
或 .tar.bz2
,解壓縮 tar 檔的副檔名是 .tar
。
如果 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 已存在
?>
這是一個非常惱人的錯誤。不過,您可以使用以下方法來解決它
$data = 'some.test.string';
$phar = new PharData('test.tar');
$phar->compress(Phar::GZ, substr($data, strpos($data, '.') + 1));
這個方法會破壞檔名中第一個點號之後的所有內容,並將其替換為 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" 的檔案