Jesteś tutaj: webmade.org >> porady >> php + mysql
autor: Patryk 'yarpo' Jar, ostatnia modyfikacja: 2008-03-16
PHP w swojej prostocie i funkcjonalności pozwala na wiele ciekawych rzeczy, bez żadnego wysiłku (niech ktoś spróbuje choćby sprawdzić w ANSI C czy istnieje jakiś plik lub w Assemblerze przejrzeć zawartość katalogu, to naprawdę dostrzeże jak prosty jest PHP).
Ostatnio właśnie zacząłem się bawić jedną z takich super-funkcji PHP.
header();
Daje on niezwykle wiele możliwości. A co robi? Wysyła surowy nagłówek PHP. Pamiętaj, jednak, aby przed wywołaniem funkcji header nie wysłać do przeglądarki żadnego tekstu!
Kilka ciekawszych zastosowań:
Bardzo przydatne gdy wysyłasz plik, który nie ma nagłówka HTML. Mi się przydało, gdy generowałem plik z danymi JSON.
header('Content-type: utf-8');
header('Cache-control: no-cache');
header('location: strona.php'); // choć powinno być (wg manuala) http://www.inna_strona.com
Powoduje to przejście na inną stronę. Ja stosowałem to w takim przypadku:
if ($jakis_warunek) header('location: strona.php?wynik=sukces'); header('location: strona.php?wynik=porazka');
Wg praw logiki, jeśli spełniony jest warunek wykonany zastanie pierwszy „skok”. Jeśli nie, to pierwszy zostanie opuszczony i wykona się drugi „skok”. No właśnie... Nie koniecznie :).
Funkcja header nie kończy działania skryptu. I w powyższym przypadku bardzo prawdopodobne, że owszem jesli $jakiś_warunek == true to wykona się pierwsza instrukcja. Jednak zdąrzy się także wykonać i druga...
Jak to obejść? Pierwszy sposób:
if ($jakis_warunek) header('location: strona.php?wynik=sukces'); else header('location: strona.php?wynik=porazka');
Choć nadal nie jest idealny. Poprawmy go jeszcze
if ($jakis_warunek) { header('location: strona.php?wynik=sukces'); exit(); } else { header('location: strona.php?wynik=porazka'); exit(); }
Jak widzisz, nie stosuję klamer wszędzie tam gdzie jest to możliwe [a możliwe jest tam, gdzie po wyrażniu warunkowym występuje tylko jedna linijka - „do pierwszego średnika”].
Użyłem tu funkcji exit() która bezwarunkowo kończy skrypt. Polecam stosowanie takiego siłowego rozwiązania przy stosowaniu header()... Ja straciłem kilka godzin szukając błędów, w całkiem już sporym systemie :P
Istnieje także inna funkcja, o podobnym działaniu jak exit(). Jest to funkcja die(). Odsyłam do manuala po więcej szczegółów. Obie są nieźle i zrozumiale opisane :). Warto też poczytać o header(), bo ma więcej możliwości niż tu opisałem.
Patryk 'yarpo' Jar
szukaj: header wysyłanie nagłówka location content-type cache exit die
Osoby czytające tę publikację przeglądały również:
© 2004-2008 copyright by webmade.org