首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP: ob_start(),如何限制回调

PHP: ob_start(),如何限制回调
EN

Stack Overflow用户
提问于 2017-03-14 12:52:27
回答 1查看 649关注 0票数 5

在发出ob_start调用时,如何停止对*_clean()回调的调用?

代码语言:javascript
复制
ob_start(function($buffer, $phase){
    // code here
}, 0, PHP_OUTPUT_HANDLER_FLUSHABLE | PHP_OUTPUT_HANDLER_REMOVABLE);

不会阻止运行ob_end_cleanob_get_cleanob_clean调用。我希望您注意到,缓冲区并没有按照文档使用正确的文档标志启动。

至于PHP_OUTPUT_HANDLER_*常量,我还没有找到一个合适的手册页,其中解释了$phase参数,并详细说明了与这些常量相关的位组。甚至是我必须从常量全局变量中获得的实际名称/值。

代码语言:javascript
复制
PHP_OUTPUT_HANDLER_START
PHP_OUTPUT_HANDLER_WRITE
PHP_OUTPUT_HANDLER_FLUSH
PHP_OUTPUT_HANDLER_CLEAN
PHP_OUTPUT_HANDLER_FINAL
PHP_OUTPUT_HANDLER_CONT
PHP_OUTPUT_HANDLER_END
PHP_OUTPUT_HANDLER_CLEANABLE
PHP_OUTPUT_HANDLER_FLUSHABLE
PHP_OUTPUT_HANDLER_REMOVABLE
PHP_OUTPUT_HANDLER_STDFLAGS
PHP_OUTPUT_HANDLER_STARTED
PHP_OUTPUT_HANDLER_DISABLED

知道这些常量,我试图限制,这样没有干净的方法触发我的回调和短路,它的逻辑。但是我无法获得任何干净方法的$phase内容(不能从回调中调用printf、echo、ob_start )。

也许我做错了,我的设想是:

  • 我在开始时启动一个缓冲区,以便稍后处理所有输出。
  • 许多我无法控制的代码运行: for ($i = 0; $i < ob_get_level(); $i++) { $final .= ob_get_clean(); }
  • 触发我的回调,尽管它不应该,因为代码不是它的所有者/没有设置可清除的标志
  • 我为空缓冲区触发警报,即使不是这样,因为它们在另一个缓冲区中重新构造它。

基本上,我的问题是:

  • 我能阻止这种事吗?
  • 如果没有,还有别的办法吗?
EN

回答 1

Stack Overflow用户

发布于 2018-03-11 14:27:43

如果您有清除整个缓冲区的代码,并且无法控制它,那么您就无法让ob_*命令正常工作。不过,您可以实现自己的缓冲区构造,并在那里手动添加输出。

这门课可能看起来像这样

代码语言:javascript
复制
<?php

class MyBuffer
{
    static $buffer = '';

    public static function add(string $output)
    {
        self::$buffer .= $output;
    }

    public static function get()
    {
        return self::$buffer;
    }

    public static function get_clean()
    {
        $buffer = self::$buffer;
        self::$buffer = '';
        return $buffer;
    }
}

A你可以按以下方式使用它

代码语言:javascript
复制
// ... some code
MyBuffer::add('Hello user, glad you joined us!');
// ... some more code
MyBuffer::add('Your socore is ' . $score . '. Congratz!');
// ...
echo MyBuffer::get_clean();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42786566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档