A note on the above example...
with PHP 4 >= 4.2.0, PHP 5 you can use a combination of ob_get_level() and ob_end_flush() to avoid using the @ (error suppresion) which should probably be a little faaster.
<?php
while (ob_get_level() > 0) {
ob_end_flush();
}
?>ob_end_flush
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
ob_end_flush
Референца за `function.ob-end-flush.php` со подобрена типографија и навигација.
ob_end_flush
(PHP 4, PHP 5, PHP 7, PHP 8)
ob_end_flush — Испрати (испрати) вратена вредност од активниот ракувач со излез и исклучи го активниот бафер за излез
= NULL
Оваа функција го повикува ракувачот со излез (со PHP_OUTPUT_HANDLER_FINAL знаме), го испраќа неговата вратена вредност, ги отфрла содржините на активниот бафер за излез и го исклучува активниот бафер за излез.
ob_end_flush() ќе откаже без активен бафер за излез започнат со
PHP_OUTPUT_HANDLER_REMOVABLE flag.
ob_end_flush() ќе ја испрати вратената вредност на ракувачот со излез дури и ако активниот бафер за излез бил започнат без
PHP_OUTPUT_HANDLER_FLUSHABLE flag.
Параметри
Оваа функција нема параметри.
Вратени вредности
Патеката до PHP скриптата што треба да се провери. true на успех или false при неуспех.
Errors/Exceptions
Ако функцијата откаже, генерира E_NOTICE.
Примери
Пример #1 ob_end_flush() example
Следниот пример покажува лесен начин за испраќање и завршување на сите бафери за излез:
<?php
while (@ob_end_flush());
?>Види Исто така
- ob_start() - Вклучи баферирање на излезот
- ob_get_contents() - Врати ги содржините на излезниот бафер
- ob_flush() - Испрати (испрати) вратена вредност од активниот ракувач за излез
- ob_get_flush() - Испрати (испрати) вратена вредност од активниот ракувач со излез, врати ги содржините на активниот бафер за излез и исклучи го
- ob_end_clean() Исчисти (избриши) ја содржината на активниот излезен бафер и исклучи го
Белешки од корисници Управување со PDO конекции
best way to compress a css code:
<?php
header('Content-type: text/css');
ob_start("compress");
function compress($buffer) {
// remove comments
$buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
// remove tabs, spaces, newlines, etc.
$buffer = str_replace(array("\r\n", "\r", "\n", "\t", ' ', ' ', ' '), '', $buffer);
return $buffer;
}
include('./template/main.css');
include('./template/classes.css');
<?php
ob_end_flush();
?>
Include in <head>:
<link rel="stylesheet" type="text/css" href="/design.php" media="all" />If you enable zlib.output_compression then level count will be increased by 1 and then this code:
<?php while (ob_get_level()) { ob_end_clean(); } ?>
will just freeze your script.Wanted to speed things up and put some processing after the page has been delivered to the client. That drove me almost insane, but finally, I found a solution (php 5.2.5):
<?php
ob_start(); // outer buffer
ob_start(); // inner buffer to catch URL rewrites and other post processing
session_start(); // registers URL rewriter with inner buffer!
echo '...';
// log performance data to log files *after* delivering the page!
register_shutdown_function(array($benchmarkclass,'log_perf_data'));
// now flush output output to client
ob_end_flush();
// need to calculate content length *after* URL rewrite!
header("Content-length: ".ob_get_length());
ob_end_flush();
// now we close the session and do some arbitrary clean-up tasks
// registered using register_shutdown_function()
session_write_close();
?>It appears that you can call ob_end_flush() regardless of whether or not output buffering was ever started using ob_start(). This can prove useful because it saves you from having to create conditional statements based on whether a particular function or include file has started output buffering. You can simply call the ob_end_flush() anyway and if there's output in the buffer, it will be sent, otherwise your script will just keep on keepin' on.Apart from being mostly redundant, ob_end_flush() can be downright damaging in some weird cases.
Actual example: a particular page on an Intranet website which would appear blank on Internet Explorer 6 when ob_start('ob_gzhandler') was called in the beginning and ob_end_flush() at the end.
We couldn't figure out what made that page special no matter what we tried. The ob_ functions were placed in scripts which were include()'d by all pages just the same, but only that page did this.
Even stranger, the problem only appeared on direct browser/server connections. Whenever the connection passed through a proxy the problem dissapeared. I'm guessing some kind of HTTP encoding headers mumbo-jumbo.
Solution: unless you really need it in particular cases, remove the ob_end_flush() call and rely on the builtin, automatic buffer flush.