PHP ob_end_clean不起作用

时间:2016-02-06 13:58:13

标签: php

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(); 

我做错了吗?

1 个答案:

答案 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)可以进一步操作此类输出和/或将用户重定向到另一个页面。