ob_start
(PHP 4, PHP 5)
ob_start — A kimenet pufferelés bekapcsolása
LeÃrás
Ezzel a függvénnyel kapcsolhatjuk be a PHP saját belsÅ‘ kimenet pufferelési mechanizmusát. Ameddig a kimenet pufferelés be van kapcsolva, a fejlécadatokon kÃvül semmiféle kimenet nem hagyja el a PHP háza tájékát, az egy belsÅ‘ pufferben tárolódik.
Ennek a puffernek a tartalma az ob_get_contents() függvény segÃtségével változóba másolható. Ha végül szeretnénk a puffer tartalmát kiadni a php kezébÅ‘l, akkor jön szóba az ob_end_flush(). Ha valamiért menet közben úgy döntünk, a puffer tartalma mégis felesleges, az ob_end_clean() csendben és titokban megsemmisÃti a pufferünket tartalmastól, nem hagyja el egy bájt sem ekkor a php-t.
Az itt output_callback néven nevezett második, opcionális paraméter segÃtségével megadhatunk egy függvényt, melynek egy string tÃpusú adatot kell paraméterként fogadnia, és ugyancsak stringet kell visszaadnia. Ez a megadható függvény akkor hÃvódik meg, amikor az ob_end_flush() meghÃvásra kerül, vagy a script végeztével a kimeneti puffer ürÃtésekor, automatikusan. Ekkor megkapja ez az output_callback paraméterben megadott függvény a puffer tartalmát, ezzel eljátszhadozhat, majd visszaadja a játszadozás eredményét, és ez kerül végül a php kimenetére.
Note: A 4.0.4-es PHP verziótól felfele létezik egy ob_gzhandler() nevű beépÃtett php függvény, mely segÃtségével gz tömörÃtett formában küldhetjük el adatainkat a böngészÅ‘ fele. Az ob_gzhandler() erre csak akkor vetemedik, ha úgy találja, a böngészÅ‘ ezt a gzip kódolt formátumot elfogadja. Ezt a függvényt tehát az ob_start() második paramétereként megadva használhatjuk fel.
A pufferek egymásba ágyazhatóak, azaz miközben már van aktÃv kimeneti pufferünk, hozhatunk létre még egyet. Viszont ez esetben biztosnak kell lennünk abban, hogy az ob_end_flush() megfelelÅ‘ számban meg legyen hÃvva. Ha több output_callback is meg van ilyenkor adva, mindegyik pufferhez másfajta, akkor azok mind sorban végrehajtódnak az egymásba ágyazottság sorrendjében.
Az ob_end_clean(), ob_end_flush(), ob_clean(), ob_flush() és ob_start() nem hÃvható "callback" függvényekbÅ‘l. Ha callback függvénybÅ‘l hÃvod ezeket, a viselkedés nem definiált. Ha törölni szeretnéd egy buffer tartalmát, ad vissza "" (üres karaktersorozatot) a callback függvénybÅ‘l.
Example#1 Felhasználó által Ãrt puffermódosÃtó függvény használata
<?php
function callback($buffer) {
// minden sört borra cserélünk
return (ereg_replace("Sörre", "Borra", $buffer));
}
ob_start("callback");
?>
<html>
<body>
<p>Sörre bor, mindenkor!
</body>
</html>
<?php
ob_end_flush();
?>
A következő kimenet jön létre:
<html>
<body>
<p>Borra bor, mindenkor!
</body>
</html>
Lásd még: ob_get_contents(), ob_end_flush(), ob_end_clean(), ob_implicit_flush() és ob_gzhandler().