(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();"