2024 日本 PHP 研討會

Phar::convertToExecutable

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

Phar::convertToExecutable將 phar 封存轉換為其他可執行的 phar 封存檔案格式

說明

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

注意事項:

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

此方法用於將 phar 封存檔轉換為其他檔案格式。例如,它可以用於從基於 zip 的可執行 phar 封存檔,或從 phar 檔案格式的可執行 phar 封存檔建立基於 tar 的可執行 phar 封存檔。此外,它還可以用於對 tar 或 phar 格式的封存檔應用全封存壓縮。

如果沒有指定任何變更,此方法會拋出 BadMethodCallException 例外。

如果成功,此方法會在磁碟上建立一個新的封存檔,並返回一個 Phar 物件。舊的封存檔不會從磁碟中移除,應該在程序完成後手動移除。

參數

format

這應該是 Phar::PHARPhar::TARPhar::ZIP 之一。如果設為 null,則會保留現有的檔案格式。

compression

這應該是 Phar::NONE 表示不進行全封存壓縮,Phar::GZ 表示基於 zlib 的壓縮,以及 Phar::BZ2 表示基於 bzip 的壓縮。

extension

此參數用於覆寫已轉換封存檔的預設檔案副檔名。請注意,所有基於 zip 和 tar 的 phar 封存檔的檔案副檔名中都必須包含 .phar 才能被作為 phar 封存檔處理。

如果轉換為基於 phar 的封存檔,預設副檔名是 .phar.phar.gz.phar.bz2,取決於指定的壓縮方式。對於基於 tar 的 phar 封存檔,預設副檔名是 .phar.tar.phar.tar.gz.phar.tar.bz2。對於基於 zip 的 phar 封存檔,預設副檔名是 .phar.zip

回傳值

成功時,此方法會返回一個 Phar 物件;失敗時,則返回 null

錯誤/例外

當無法壓縮、指定了未知的壓縮方法、請求的歸檔正在使用 Phar::startBuffering() 進行緩衝但尚未使用 Phar::stopBuffering() 結束、寫入支援被停用時會拋出 UnexpectedValueException 異常,以及在 phar 建立過程中遇到任何問題時會拋出 PharException 異常,而無法壓縮時則拋出 BadMethodCallException 異常。

更新日誌

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

範例

範例 #1 Phar::convertToExecutable() 範例

使用 Phar::convertToExecutable()

<?php
try {
$tarphar = new Phar('myphar.phar.tar');
// 將其轉換為 phar 檔案格式
// 注意 myphar.phar.tar *不會* 被取消連結
$phar = $tarphar->convertToExecutable(Phar::PHAR); // 建立 myphar.phar
$phar->setStub($phar->createDefaultStub('cli.php', 'web/index.php'));
// 建立 myphar.phar.tgz
$compressed = $phar->convertToExecutable(Phar::TAR, Phar::GZ, '.phar.tgz');
} catch (
Exception $e) {
// 在此處處理錯誤
}
?>

參見

新增註釋

使用者貢獻的註釋 1 則註釋

alex at phpguide dot co dot il
13 年前
轉換為可執行檔和壓縮方法會覆寫您建立的任何存根,並使用它們自己的存根,該存根負責提取/執行自身內容。

在 convertToExecutable 之後呼叫 setStub() 也沒有幫助。就 php 5.3.6 (phar 2.0.1) 而言,如果您想讓 phar 封存檔可透過網路存取,您必須建立自己的
index.php,它將包含一個不可執行的 phar 並作為啟動程式。
To Top