2016-02-06 2 views
0

вывода ob_end_clean не очистить буфер: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(); 

ли я сделать что-то не так?

+0

Почему бы не использовать ob_end_flush()? –

+0

ob_end_flush() вместо ob_end_clean()? Пробовал это, это не имеет значения. – Totallama

ответ

0

Вы не предоставили возможность ob_start, что позволяет очищать буфер, т.е. PHP_OUTPUT_HANDLER_FLUSHABLE отсутствует.

Но, по умолчанию для этих параметров уже установлено хорошо в соответствии с docs:

флагов параметра битовый, который управляет операциями, которые могут быть выполнены на выходном буфере. По умолчанию используется очистка, очистка и удаление выходных буферов, которые могут быть установлены явно через 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) для дальнейшей обработки такого вывода и/или перенаправления пользователя на другую страницу.

+0

Но он не работает. «Загрузка ...» просто остается там. – Totallama

+0

@Totallama Сервер не может удалить то, что клиент уже получил. Если вы хотите удалить spinner div _after_, он был отправлен, клиенту нужно манипулировать [DOM] (https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model): '<тип скрипта = "text/javascript"> var spinner = document.getElementById ('spinner'); spinner.parentNode.removeChild (spinner) "' – Kontrollfreak

+0

Очистка буфера - это не прочистка того, что уже отправлено в браузер. Очистка буфера позволяет начать с чистого буфера для будущей буферизации. Что бы вы ни отправили (заподлицо) браузер больше не находится под контролем PHP. Так же сложно, как вернуть устное слово. – trincot

Смежные вопросы