从PHP手册:PHP_OUTPUT_HANDLER_CLEANABLE const控制对函数的访问:ob_clean(),ob_end_clean()和ob_get_clean()。
ob_start(null, 0, PHP_OUTPUT_HANDLER_CLEANABLE);
使用ob_end_clean(),有一个通知:“ob_end_clean():无法丢弃默认输出处理程序缓冲区(1)”。
使用ob_get_clean(),甚至有双重注意:“ob_get_clean():无法删除默认输出处理程序(1)的缓冲区”。
据我所知,只有可清理缓冲区才能刷新和删除。那么为什么在手动这些函数控制PHP_OUTPUT_HANDLER_CLEANABLE const?我对在输出缓冲中使用标志感到困惑。
答案 0 :(得分:4)
仅传递PHP_OUTPUT_HANDLER_CLEANABLE作为arg意味着ob只能被清除,不能刷新或删除(结束)。 ob_end_clean()尝试删除(结束)缓冲区,但标志PHP_OUTPUT_HANDLER_REMOVABLE未通过,因此这是错误的原因。 ob_get_clean()基本上执行ob_get_contents()和ob_end_clean(),所以也是错误。
仅传递PHP_OUTPUT_HANDLER_FLUSHABLE作为arg意味着ob只能刷新,不能清除或删除(结束)。
仅传递PHP_OUTPUT_HANDLER_REMOVABLE作为arg意味着ob只能删除(结束),不能清除或刷新。
传递(PHP_OUTPUT_HANDLER_CLEANABLE | PHP_OUTPUT_HANDLER_FLUSHABLE)作为arg意味着只能清除和刷新ob,而不能删除(结束)。
传递(PHP_OUTPUT_HANDLER_CLEANABLE | PHP_OUTPUT_HANDLER_FLUSHABLE | PHP_OUTPUT_HANDLER_REMOVABLE)作为arg意味着ob可以被清理和刷新并删除(结束)。
所有其他组合的类似结果,除非注意PHP_OUTPUT_HANDLER_STDFLAGS是(PHP_OUTPUT_HANDLER_CLEANABLE | PHP_OUTPUT_HANDLER_FLUSHABLE | PHP_OUTPUT_HANDLER_REMOVABLE)的缩写或相同。