![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 17.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
Natrafiłem na bardzo dziwny błąd ... otóż już nie raz pisałem własne error_handler'y ... ale przy obecnym projekcie coś się ostro sypie, i nie chce go w ogóle ustawić. Zawęziłem kod do samego wadliwego punktu, i nie dowierzam nadal czemu nie działa. Próbowałem już na 3 systemach operacyjnych (windows, gentoo oraz centos) ... nigdzie nie działa. Co jeszcze ciekawsze - przekopiowałem działające error_handler'y z innego projektu (który mi działa oczywiście w pełni) i to już zadziałać nie chciało. A to oznacza ze na serwerze na którym uruchamiam ten skrypt można ustawiać własne error_handler'y (czyli prawdopodobnie nie mam błędu w konfiguracji, skoro w innym, równoległym projekcie, na tym samym serwerze, na tej samej konfiguracji - działa).
Oto kod :
U mnie wydruk wygląda następująco : Kod Cant set error handler ! Fatal error: Call to undefined method tmp::daa() in /var/www/localhost/htdocs/foo.php on line 21 Czemu to jest źle ? ponieważ powinien rzucić backtracem, a na dodatek komunikat błedu powinien podać w czerwonej ramce. Tymczasem się tak nie dzieje - komunikat który się pokazuje jest standardowym php'owym raportem o błędzie Będę bardzo wdzięczny za pomoc, siedzię już nad tym prawie tydzień, w googlach też nie można znaleźć niczego konkretnego ... Pozdrawiam |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 111 Pomógł: 25 Dołączył: 23.07.2004 Ostrzeżenie: (0%) ![]() ![]() |
1. Własnym error handlerem nie obsłużysz fatal error.
2. set_error_handler( "funkcja" ) zwraca poprzednio zdefiniowaną funkcje sens miałby ten zapis
W takim przypadku jak Ty podałeś możesz użyć instrukcji Try Catch do przechwycania wyjątków oraz napisać klasę wyjątku. -------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
1. Poprzednio nie miales zadnego handlera ustawionego, wiec ci zwraca NULL (choc niejasno jest to w manualu napisane)
2. Takich fatalow handler nie zlapie. -------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 17.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
ciekawe ... mogę powiedzieć że w takim razie jest to wybitnie niejasno napisane :
Kod Returns a string containing the previously defined error handler (if any), or <b><tt>NULL</tt></b> on error Tymczasem wracając : Kowalikus .... mówisz że do takiego przypadku można napisać exceptiona ? bardzo chętnie bym się dowiedział jak coś takiego zrobić, gdyż intensywnie zaczynam używać exceptionów, i to był właśnie pewien 'sęk' którego za bardzo nie wiedziałem jak obejść. Czy chodzi o to żeby w error_handlerze rzucić wyjątek ? Czy moze jakieś inne rozwiązanie ? |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 111 Pomógł: 25 Dołączył: 23.07.2004 Ostrzeżenie: (0%) ![]() ![]() |
Pamiętaj, że Fatal Error jest bugiem w kodzie, po którym to skrypt jest zatrzymywany. Nie ma możliwości przechwycenia. Powyższy kod umożliwia obsłużenie błędu gdy próbujemy wykonać metodę na rzecz klasy która nie istnieje, ale da się to dzięki metodzie __call(). Poczytaj o Exception. Klasy wyjątków mogą dziedziczyć po wbudowanej klasie Exception, przez co możesz sobie modyfikować pewne elementy. Ten post edytował Kowalikus 17.02.2008, 18:38:50 -------------------- |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 17.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
O Exceptions mam już dobrze przerobione, dziedziczenie po Exception mam już przewałkowane w wielu miejscach itp itd.
Co do przykładu ... cóż ... akurat wywołanie nieistniejącej metody było zamierzone, ponieważ chciałem wywołać tego typu błąd (jakiś poważniejszy exception) Czyli generalnie nie ma żadnej możliwości żeby przygotować się na przetwarzanie 'niebezpiecznych plików' ? chodzi mi o sytuację gdzie z pliku głównego includuję coś, i jeśli w tym zaincludowanym pliku były błedy, to cały output z niego jest zatrzymany (ob_start itepe), a zamiast tego jest ładny komunikat błędu pokazywany. Czy mogę jakimiś handlerami mogę coś takiego osiągnąć ? |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 16:39 |