PHP Conference Japan 2024

Phar::stopBuffering

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

Phar::stopBuffering停止緩衝 Phar 封存的寫入請求,並將變更儲存到磁碟

說明

public Phar::stopBuffering(): void

Phar::stopBuffering() 方法與 Phar::startBuffering() 方法搭配使用。當建立或修改包含大量檔案的 Phar 封存時,Phar::startBuffering() 可以顯著提升效能。一般情況下,每次在 Phar 封存中建立或修改檔案時,整個 Phar 封存都會隨著變更而重新建立。如此,封存便能與執行的操作保持同步更新。

然而,當只是建立新的 Phar 封存時,這樣做可能沒有必要,一次寫入整個封存會更有效率。同樣地,通常需要進行一系列的變更,並在對磁碟進行任何變更之前確保所有變更都可行,類似於關聯式資料庫中的交易概念。Phar::startBuffering()/Phar::stopBuffering() 這對方法便是為此目的而提供的。

Phar 寫入緩衝是針對個別封存的,對 `foo.phar` Phar 封存啟用的緩衝並不會影響對 `bar.phar` Phar 封存的變更。

參數

此函式沒有參數。

回傳值

無回傳值。

錯誤/例外

如果在將變更寫入磁碟時遇到任何問題,會擲出 PharException 例外。

範例

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

<?php
$p
= new Phar(dirname(__FILE__) . '/brandnewphar.phar', 0, 'brandnewphar.phar');
$p['file1.txt'] = 'hi';
$p->startBuffering();
var_dump($p->getStub());
$p->setStub("<?php
function __autoload(\$class)
{
include 'phar://brandnewphar.phar/' . str_replace('_', '/', \$class) . '.php';
}
Phar::mapPhar('brandnewphar.phar');
include 'phar://brandnewphar.phar/startup.php';
__HALT_COMPILER();"
);
$p->stopBuffering();
var_dump($p->getStub());
?>

上述範例將輸出

string(24) "<?php __HALT_COMPILER();"
string(195) "<?php
function __autoload($class)
{
    include 'phar://' . str_replace('_', '/', $class);
}
Phar::mapPhar('brandnewphar.phar');
include 'phar://brandnewphar.phar/startup.php';
__HALT_COMPILER();"

參見

新增筆記

使用者貢獻的筆記

此頁面沒有使用者貢獻的筆記。
To Top