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.