Bardzo częste błędy wywołane przez funkcje używające protokołu HTTP są dla Nas utrapieniem. Z odsieczą przychodzą funkcje ob_start() i ob_end_flush().
Do tej pory obowiązywała Cię reguła, aby wszystkie funkcje wysyłające dane za pomocą protokołu HTTP były wywoływane przed znacznikami <html> i <head>. Nie przestrzeganie tej zasady wywoływało nieoczekiwane skutki, które zwykle objawiały się komunikatem o błędzie. Zdarzają się jednak sytuacje, w których bardzo potrzebne lub znacznie ułatwiające jest zastosowanie owych funkcji już po zatwierdzeniu znaczników <html> i <head>. Do tego celu posłużą nam dwie nowe funkcje ob_start() i ob_end_flush(), które buforują wszystkie dane wyjściowe. Dzięki nim strona jest wyświetlana już po przetworzeniu wszystkich potrzebnych danych.
Obie funkcje nie wymagają żadnych parametrów. Funkcja ob_start() powinna być użyta przed znacznikiem <html>, a funkcja ob_end_flush() po zamknięciu tego znacznika, czyli po </html>. Ważne jest to, aby poza obszarem, który został objęty przez te funkcje, nie został użyty żaden znacznik HTML. Zasada wydaje się być prosta, ale na wszelki wypadek przedstawię to na przykładzie.
Dotychczas obowiązywał Cię taki zapis:
| <? if ($dane) setcookie(’dane’, „$dane”); ?> <html> <head> <title>Buforowanie danych bez użycia ob_start() i ob_end_flush()</title> </head> <body> <? if ($dane) { print „Dane wysłane: <b>$dane</b>!n”; } else { print „<form method=get>n Wpisz jakąś wartość i kliknij <b>OK</b><br>n <input type=text name=dane>n <input type=submit value=OK>n </form>n”; } ?> </body> </html> |
Teraz ten sam skrypt możesz zapisać następująco:
| <? ob_start(); ?> <html> <head> <title>Buforowanie danych z użyciem ob_start() i ob_end_flush()</title> </head> <body> <? if ($dane) { setcookie(’dane’, „$dane”); print „Dane wysłane: <b>$dane</b>!n”; } else { print „<form method=get>n Wpisz jakąś wartość i kliknij <b>OK</b><br>n <input type=text name=dane>n <input type=submit value=OK>n </form>n”; } ?> </body> </html> <? ob_end_flush(); ?> |
Być może przykład ten nie odzwierciedla prawdziwej wygody jaką zapewniają omawiane funkcje, ale na pewno podczas pracy nad swoimi skryptami spotkasz się z ich uzasadnionym użyciem.
