如何让ob_start()回调函数在获取缓冲区内容时触发?



我有一个脚本,在显示内容之前运行自定义电子邮件混淆类的Obfuscate()函数,如下所示:

ob_start(array($obfuscator, "Obfuscate"));
include('header.php');
print($html);
include('footer.php');
ob_end_flush();

这一切都很好。然而,我已经完全重写了我的视图架构,所以我需要从类函数内运行电子邮件混淆并返回该字符串(然后得到echo ed)。我最初将上面的内容重写为:

ob_start(array($this->obfuscator, "Obfuscate"));
include('header.php');
echo($this->content);
include('footer.php');
$wrappedContent = ob_get_contents();
ob_end_clean();

不幸的是,$this->obfuscator->Obfuscate()回调没有被触发。此后,我了解到ob_get_contents()不会触发回调,但尝试了ob_get_clean() &ob_get_flush()也无济于事。

那么,我如何在回调被触发后获得缓冲区的内容呢?

当然,我忽略了这样一个事实,即在ob_start()上使用回调的唯一原因是我想在内容刷新之前运行Obfuscate(),但是如果我得到该内容,我不需要运行回调!所以,不使用回调,只是通过Obfuscate()运行ob_get_clean()的结果做了我想要的。哎!

ob_start();
include('header.php');
echo($this->content);
include('footer.php');
return $this->obfuscator->Obfuscate(ob_get_clean());

变化

ob_end_clean();

ob_clean() 

将触发。

这是代码,例如I tried

<?php
class Obfuscate {
    public function __construct() 
    {
    }
    public function getObfuscate()
    {
        return "obfuscate";
    }
}
class Example 
{
    public function hello( $obfuscator )
    {
        ob_start(array( $obfuscator, 'getObfuscate' ));
        include('header.php');
        echo "Thi is a content ";
        include('footer.php');
        $wrappedContent = ob_get_contents();
        ob_clean();
    }
}
$obfuscator = new Obfuscate();
$example = new Example;
$example->hello($obfuscator);
ob_clean();

最新更新