function ObslugaBlad( $bl_nr , $bl_opis , $bl_plik , $bl_linia , $bl_zmn ) { // tutaj jakiś kod który sprawdza jaki rodzaj błedu, zapisuje log błedu itp. itd. if ($bl_nr == E_ERROR || $bl_nr == E_PARSE || itd ) { } }
I tu powstaje problem. Mimo że zawsze staram się oddzielić php od html i ten ostatni jest wysyłany na samym końcu skryptu to jednak w tej specyficznej sytuacji (obsługi błedów) może się zdażyć że to przekierowanie będzie wykonywane kiedy już coś zostało wysłane do przeglądarki.
Zastosowałem mały wybieg i dodałem po header linijkę:
Wszystko działa. W momencie kiedy nic do przeglądarki nie było wysyłane header zadziała. Gdy przeciwnie, to skrypt generuje ostrzeżenie (a niech sobie robi) i dzięki nowej linijce i tak przechodzi tam gdzie trzeba.
Zadziwiła mnie inna rzecz. Gdy skrypt testuję na moim domowym serwerze do testów, to header działa bez względu czy coś było czy nie było wysyłane do przeglądarki! (zawsze czytałem że to niemożliwe bez buforowania). Na serwerze, gdzie ta strona ma wisieć, niestety go nie wykonuje. Czyli zależy to od konfiguracji php ma serwerze (?).
Czy ktoś z szanownego grona wie jak to się konfiguruje? Czy to zależy od wersji PHP? (na domowym mam 5.4.27 a na docelowym 5.3), czy to jest włączone jakieś buforowanie?