Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] nie pokazuje wszystkich bledow
Forum PHP.pl > Forum > Przedszkole
pawel.s
Hej, mam mega problem nie moge nigdzie znalezc rozwiacania mam sobie kod:
  1. <?php
  2. set_error_handler('error_handler',E_ALL);
  3.  
  4. function error_handler ($errno,$errstr,$errfile,$errline){
  5. $error = 'Błąd w pliku '.$errfile.'</br>'.' Komunikat błędu: '.'"'.$errstr.'"'.'</br>'.' Błąd w pliku '.$errfile.' w wierszu  
  6. '."\n".$errline.', '.'kod błędu: '.$errno;
  7. }
  8. ?>

includuje go do innego pliku w ktorym robie blad i nie wszystkie bledy moge obsluzyc prosze bardzo o pomoc.
nevt
cytuję z manuala:
Cytat
The following error types cannot be handled with a user defined function: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, and most of E_STRICT raised in the file where set_error_handler() is called.

jesli angielski ci obcy: wymienionych powyzej bledów nie da się obsłużyć za pomocą własnej funkcji ustawionej za pomocą set_error_handler()

pozdrawiam
pawel.s
a znasz jakis inny sposob aby to zrobic ? nie moge sobie z tym poradzic.
nevt
tak. linie skryptu w których może wystąpić błąd zamaskuj operatorem @
a w następnej linijce ręcznie wywołaj jakąś funkcję która na podstawie error_get_last() zrobi to co ci potrzeba...np.
  1. <?php
  2. function check_error()
  3. {
  4. if(is_null($error = error_get_last()))
  5.  return;
  6. echo 'BŁĄD!: "'.$error['message'].'" w pliku "'.$error['file'].'", linia nr '.$error['line'];
  7. }
  8.  
  9. @ $x = 1./ 0.0;
  10. check_error();
  11. ?>

działa na wszystkie błędy z wyjątkiem błędów składni (ale chyba nie chodzi ci o ukrywanie błędnej składni prawda ? smile.gif
Cytat
MANUAL: Operator "@" nie ukrywa komunikatów o błędach, które są wynikiem błędu parsowania (parse error).


powodzenia
pawel.s
to dziala praktycznie identycznie jak set_error_handler() tez nie obsluguje wszystkich bledow
nevt
trudno - jeżeli potrzebujesz obsługi błędów składni PHP (zgroza) to się nie uda - nie tędy droga.
z założenia - żaden skrypt który posiada błędy składni nie kwalifikuje się do używania - więc po co ci obsługa tych błędów? wklejasz czyjś kod którego nie rozumiesz i chcesz maskować pojawiające się tam błędy?

albo poprawisz kod albo jesteś skazany na:

sciana.gif
pawel.s
sluchaj jest tak ze dostalem zadanie ze wszystkie bledy aplikacji maja byc zapisane do pliku (chodzi o te bledy ktore sie wyswietlaja na ekranie)

tez juz powoli w to watpie ze da rade to przechwycic smile.gif
dzieki za pomoc
nevt
aaa to wiele wyjaśnia...

widzę dwie możliwości:

1. albo dostałeś takie zadanie w celach dydaktycznych - wtedy użycie set_error_handler() tak jak zrobiłeś to na początku jest wystarczającym rozwiązaniem - nikt nie może wymagać od ciebie żebyś ominął czy nagiął zachowanie funkcji i bibliotek wbudowanych w PHP... A programowa obsługa błędów składni jest niejako z definicji bezzasadna...

2. albo masz rzeczywistą potrzebę usunięcia błędów z ekranu, ale zachowania ich w jakimś logu. Od tego jest konfiguracja serwera PHP (plik php.ini). Wszystko możesz sobie także ładnie ustawić w skrypcie (wyłączyć wyświetlanie błędów, wymusić zapis do pliku...) popatrz tutaj Podręcznik PHP - Identyfikacja błędów i kontrola pracy

Powodzenia.
pawel.s
to po prostu kolejna czesc projektu crm w pracy smile.gif

jak cos mam usprawiedliwienie smile.gif

pozdrawiam
nevt
Chyba nie do końca mnie zrozumiałeś - w drugim wariancie wskazałem ci fragment manuala, wg którego możesz osiągnąć dokładnie to, co ci potrzebne: żadnych błędów w oknie przeglądarki , za to wszystkie komunikaty błędów zapisane do wybranego przez ciebie pliku. Tylko, że nie w taki sposób, w jaki chciałeś to zrobić (obsługa proceduralna błędu), lecz poprzez odpowiednią konfigurację serwera PHP. Samą konfigurację jak najbardziej możesz wykonać w kodzie skryptu... jedyna niedogodność, to fakt, że twój kod nie wie kiedy wystąpił błąd - ale możesz połączyć obie metody - logowanie wszystkich błędów i obsługa tych, które są przechwytywalne - taki złoty środek...

Podsumowując - twój cel można osiągnąć, ale innymi metodami niż zamierzałeś - tak czy inaczej życzę powodzenia smile.gif
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.