Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> HEADER po wysłaniu do przeglądarki
miki22
post
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 2
Dołączył: 2.03.2012

Ostrzeżenie: (0%)
-----


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?

Ten post edytował miki22 26.09.2014, 18:00:59
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




POprostu u siebie w php.ini masz wlaczone domyslnie buforowanie. Dosc logiczne wink.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
miki22
post
Post #3





Grupa: Zarejestrowani
Postów: 18
Pomógł: 2
Dołączył: 2.03.2012

Ostrzeżenie: (0%)
-----


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?

Ten post edytował miki22 26.09.2014, 18:23:55
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 04:41