如何在调用*_clean()
时停止对ob_start
回调函数的调用。
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_CLEANABLE
标志启动。至于
PHP_OUTPUT_HANDLER_*
常量,我没有找到合适的手册,其中解释了 $phase
参数和与这些常量相关的位组。即使是实际名称/值,我也必须从 CONSTANTS 全局变量中获取。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(); }
即使代码不属于所有者/未设置可清理标志,它也会触发我的回调
- 我即使缓冲区不为空也触发警报,因为它们在另一个缓冲区中重构
基本上我的问题是:
- 我能停止这种事情吗?
- 如果不能,是否有其他方法?