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.
PHP.mk документација
Функции за контрола на излезот
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Патека
ref.outcontrol.php
Локална патека за оваа страница.
Извор
php.net/manual/en
Оригиналниот HTML се реупотребува и локално се стилизира.
Режим
Прокси + превод во позадина
Кодовите, табелите и белешките остануваат читливи во истиот тек.
Референца
ref.outcontrol.php
Функции за контрола на излезот
Референца за `ref.outcontrol.php` со подобрена типографија и навигација.
Функции за контрола на излезот
Види Исто така
Види исто така header() and 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_implicit_flush — Добиј го статусот на излезните бафери
- ob_list_handlers — Вклучи/исклучи имплицитно испраќање
- ob_start — Наведи ги сите активни излезни ракувачи
- output_add_rewrite_var — Вклучи баферирање на излезот
- output_reset_rewrite_vars — Додај вредности за препишувач на URL
Белешки од корисници 3 белешки
jgeewax a t gmail ¶
пред 18 години
Анонимен ¶
пред 16 години
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 (); ------------------------
?>
gruik at libertysurf dot fr ¶
21 години пред
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 ();
?>