V dneÜnφm dφle si povφme n∞co o v²stupnφm bufferovßnφ (output buffering) PHP skript∙, pomocφ kterΘho m∙₧eme jednoduÜe kontrolovat odesφlßnφ v²stup∙ skript∙ do prohlφ₧eΦe. S vyu₧itφm t∞chto funkcφ m∙₧eme nap°φklad odesφlat hlaviΦky prohlφ₧eΦi (funkce Header) i v p°φpad∞, kdy₧ u₧ jsme vypsali na strßnku urΦitß data. Nynφ si ukß₧eme jak na to.
<? // OdeÜleme n∞jakß data pomocφ fce echo. echo "Testovacφ v²stup skriptu!"; // P°esm∞rujeme u₧ivatele na hlavnφ stranu. Header("Location: index.php"); ?>
Standardn∞ by tato struktura PHP skriptu vyvolala chybu, ₧e nejde odeslat hlaviΦky, kdy₧ ji₧ byl odeslßn v²stup (jasn∞, odeslßnφ hlaviΦky m∙₧eme umφstit do hornφ Φßsti skriptu, ale je to jen ukßzka ;-). Po ·prav∞ by skript mohl vypadat nap°φklad takto:
<? // Zapne bufferovßnφ v²stupu. ob_start(); // OdeÜleme n∞jakß data pomocφ fce echo. echo "Testovacφ v²stup skriptu!"; // P°esm∞rujeme u₧ivatele na hlavnφ stranu. Header("Location: index.php"); // OdeÜle obsah bufferu. ob_end_flush(); ?>
Nynφ si ukß₧eme jednotlivΘ funkce a popφÜeme si jejich funkci:
Zapne bufferovßnφ v²stupu skriptu, kdy vÜechna data se odesφlajφ do bufferu. S tφmto v²stupem m∙₧eme potΘ dßle pracovat.
Vypne bufferovßnφ a vyma₧e obsah bufferu.
Vypne bufferovßnφ a odeÜle obsah bufferu.
OdeÜle obsah bufferu (pokud n∞jak² je) a nevyma₧e jeho obsah.
Vrßtφ obsah bufferu, se kter²m m∙₧eme dßle pracovat a nakonec jej vyma₧e.
<? // Zapne bufferovßnφ v²stupu. ob_start(); // OdeÜleme n∞jakß data pomocφ fce echo. echo "Testovacφ v²stup skriptu!"; // Ulo₧φme obsah bufferu do prom∞nnΘ, se kterou m∙₧eme dßle pracovat. $vystup = ob_get_clean(); ?>
Vrßtφ obsah bufferu (pokud n∞jak² je).
<? // Zapne bufferovßnφ v²stupu. ob_start(); // OdeÜleme n∞jakß data pomocφ fce echo. echo "Testovacφ v²stup skriptu!"; // Ulo₧φme obsah bufferu do prom∞nnΘ, se kterou m∙₧eme dßle pracovat. $vystup = ob_get_contents(); // OdeÜle obsah bufferu. ob_end_flush(); ?>
Vrßtφ velikost bufferu.
<? // Zapne bufferovßnφ v²stupu. ob_start(); // OdeÜleme n∞jakß data pomocφ fce echo. echo "Testovacφ v²stup skriptu!"; // Ulo₧φme obsah bufferu do prom∞nnΘ, se kterou m∙₧eme dßle pracovat. $delka = ob_get_length(); // OdeÜle obsah bufferu. ob_end_clean(); echo $delka; ?>
Pomocφ v²stupnφho bufferovßnφ m∙₧eme takΘ vyu₧φvat komprimaci v²stupu pomocφ gzip komprese. StaΦφ p°i startu bufferovßnφ trochu upravit funkci ob_start.
<? // Zapne bufferovßnφ v²stupu. ob_start("ob_gzhandler"); // OdeÜleme n∞jakß data pomocφ fce echo. echo "Testovacφ v²stup skriptu!"; ?>
Komprimaci v²stupu m∙₧eme takΘ povolit nastavenφm direktivy v php.ini:
output_handler = ob_gzhandler
Pro tento dφl to bude vÜe. V p°φÜtφm dφle budeme dßle pokraΦovat v poznßvßnφ jazyka PHP.