ob_end_clean不清除缓冲区:
if (ob_get_level() == 0)
ob_start(null, 0, PHP_OUTPUT_HANDLER_CLEANABLE ^ PHP_OUTPUT_HANDLER_REMOVABLE);
echo '<div id="spinner">Loading...</div>';
ob_flush();
flush();
ob_end_clean();
我做错了吗?
答案 0 :(得分:0)
您没有提供允许您刷新缓冲区的 ob_start 选项,即 PHP_OUTPUT_HANDLER_FLUSHABLE 缺失。
但是,根据docs:
,这些选项的默认设置已经很好flags 参数是一个位掩码,用于控制可在输出缓冲区上执行的操作。默认设置是允许清除,刷新和删除输出缓冲区,可以通过 PHP_OUTPUT_HANDLER_CLEANABLE |显式设置。 PHP_OUTPUT_HANDLER_FLUSHABLE | PHP_OUTPUT_HANDLER_REMOVABLE ,或 PHP_OUTPUT_HANDLER_STDFLAGS 作为速记。
所以请忽略flags参数。顺便说一下,其他参数都是用默认值指定的,所以你也可以将它们排除在外:
if (ob_get_level() == 0)
ob_start(); // use defaults for all arguments.
echo '<div id="spinner">Loading...</div>';
ob_end_flush(); // this does a clean as well
flush();
请注意,清除缓冲区不会消除已刷新的内容。无论刷新什么都出现在浏览器中,不再受PHP的控制。您的客户端代码(JavaScript)可以进一步操作此类输出和/或将用户重定向到另一个页面。