Poznßvßnφ PHP

Output Control funkce

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:

ob_start()

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.


ob_end_clean()

Vypne bufferovßnφ a vyma₧e obsah bufferu.


ob_end_flush()

Vypne bufferovßnφ a odeÜle obsah bufferu.


ob_flush()

OdeÜle obsah bufferu (pokud n∞jak² je) a nevyma₧e jeho obsah.


ob_get_clean

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();
?>


ob_get_contents()

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();
?>


ob_get_length()

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;
?>


Komprimace dat

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.

Petr Rympler