在发出ob_start调用时,如何停止对*_clean()回调的调用?
ob_start(function($buffer, $phase){
// code here
}, 0, PHP_OUTPUT_HANDLER_FLUSHABLE | PHP_OUTPUT_HANDLER_REMOVABLE);不会阻止运行ob_end_clean、ob_get_clean或ob_clean调用。我希望您注意到,缓冲区并没有按照文档使用正确的文档标志启动。
至于PHP_OUTPUT_HANDLER_*常量,我还没有找到一个合适的手册页,其中解释了$phase参数,并详细说明了与这些常量相关的位组。甚至是我必须从常量全局变量中获得的实际名称/值。
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(); }基本上,我的问题是:
发布于 2018-03-11 14:27:43
如果您有清除整个缓冲区的代码,并且无法控制它,那么您就无法让ob_*命令正常工作。不过,您可以实现自己的缓冲区构造,并在那里手动添加输出。
这门课可能看起来像这样
<?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你可以按以下方式使用它
// ... some code
MyBuffer::add('Hello user, glad you joined us!');
// ... some more code
MyBuffer::add('Your socore is ' . $score . '. Congratz!');
// ...
echo MyBuffer::get_clean();https://stackoverflow.com/questions/42786566
复制相似问题