Функции контроля вывода
Смотрите также
См. также header() и setcookie().
Содержание
- flush — Сброс системного буфера вывода
- ob_clean — Очищает (стирает) буфер вывода
- ob_end_clean — Очищает (стирает) буфер вывода и отключает буферизацию вывода
- ob_end_flush — Сброс (отправка) буфера вывода и отключение буферизации вывода
- ob_flush — Сброс (отправка) буфера вывода
- ob_get_clean — Получить содержимое текущего буфера и удалить его
- ob_get_contents — Возвращает содержимое буфера вывода
- ob_get_flush — Сброс буфера вывода, возвращая его содержимое и отключение буферизации вывода
- ob_get_length — Возвращает размер буфера вывода
- ob_get_level — Возвращает уровень вложенности механизма буферизации вывода
- ob_get_status — Получить статус буфера вывода
- ob_gzhandler — callback-функция, используемая для gzip-сжатия буфера вывода при вызове ob_start
- ob_implicit_flush — Функция включает/выключает неявный сброс
- ob_list_handlers — Список всех используемых обработчиков вывода
- ob_start — Включение буферизации вывода
- output_add_rewrite_var — Добавить обработчик значений URL
- output_reset_rewrite_vars — Сброс значений установленных обработчиком URL
Коментарии
For those who are looking for optimization, try using buffered output.
I noticed that an output function call (i.e echo()) is somehow time expensive. When using buffered output, only one output function call is made and it seems to be much faster.
Try this :
<?php
your_benchmark_start_function();
for ($i = 0; $i < 5000; $i++)
echo str_repeat ("your string blablabla bla bla", (rand() % 4) + 1)."<br>\n";
echo your_benchmark_end_function();
?>
And then :
<?php
your_benchmark_start_function();
ob_start ();
for ($i = 0; $i < 5000; $i++)
echo str_repeat ("your string blablabla bla bla", (rand() % 4) + 1)."<br>\n";
echo your_benchmark_end_function();
ob_end_flush ();
?>
It seems that while using output buffering, an included file which calls die() before the output buffer is closed is flushed rather than cleaned. That is, ob_end_flush() is called by default.
<?php
// a.php (this file should never display anything)
ob_start();
include('b.php');
ob_end_clean();
?>
<?php
// b.php
print "b";
die();
?>
This ends up printing "b" rather than nothing as ob_end_flush() is called instead of ob_end_clean(). That is, die() flushes the buffer rather than cleans it. This took me a while to determine what was causing the flush, so I thought I'd share.
You possibly also want to end your benchmark after the output is flushed.
<?php
your_benchmark_start_function();
ob_start ();
for ($i = 0; $i < 5000; $i++)
echo str_repeat ("your string blablabla bla bla", (rand() % 4) + 1)."<br>\n";
<----------
echo your_benchmark_end_function(); |
ob_end_flush (); ------------------------
?>