(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL phar >= 1.0.0)
Phar::stopBuffering — 停止将写入请求缓冲到 Phar 档案,并将更改保存到磁盘
Phar::stopBuffering() 与 Phar::startBuffering() 方法结合使用。 Phar::startBuffering() 在创建或修改包含大量文件的 Phar 档案时可以显着提高性能。 通常,每次以任何方式创建或修改 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();"