Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: HEADER po wysłaniu do przeglądarki
Forum PHP.pl > Forum > PHP
miki22
Stworzyłem na stronie system obsługi błędów oparty na set_error_handler(). Niektóre błędy (dokładnie Fatal errors) chciałbym by były przekierowanie na specjalną stronę, która o tym informuje zamiast wyświetlania się pustej białej strony z komunikatem błedu.
  1. function ObslugaBlad( $bl_nr , $bl_opis , $bl_plik , $bl_linia , $bl_zmn )
  2. {
  3. // tutaj jakiś kod który sprawdza jaki rodzaj błedu, zapisuje log błedu itp. itd.
  4.  
  5. if ($bl_nr == E_ERROR || $bl_nr == E_PARSE || itd )
  6. {
  7. header("location: err/blad_wew.php");
  8. exit();
  9. }
  10. }
  11.  
  12. set_error_handler('ObslugaBlad');

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ę:
  1. header("location: err/blad_wew.php");
  2. echo '<META HTTP-EQUIV="REFRESH" CONTENT="0; URL=err/blad_wew.php">';
  3. exit();

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?
nospor
POprostu u siebie w php.ini masz wlaczone domyslnie buforowanie. Dosc logiczne wink.gif
miki22
Aaaa! Z każdą wizytą na forum moja wiedza nt PHP wzrasta niepomiernie smile.gif

Wiekie dzięki Nospor! specool.gif

Już czytam sobie na temat output_buffering. A właściwie jak załatwić to, gdy nie mam dostępu do php.ini (bo tak jest w przypadku tego serwera gdzie stronka będzie wisieć). Może ktoś wie?
nospor
http://pl1.php.net/manual/en/function.ini-set.php
A tu masz napisane jaka dyrektywa gdzie moze zostac ustawiona
http://pl1.php.net/manual/en/ini.list.php
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.