Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: ErrorHandler i wyświetlanie Parse Errorów
Forum PHP.pl > Forum > PHP > Pro > Archiwum Pro
radziel
Witam, na wstępie odrazu piszę że mialem problem z "zakwalifikowaniem" tego problemu do ktoregoś z for, na php Początkujący trochę za trudny, a na php Pro - za ... banalny?

Otóż, napisalem sobie ladny ErrorHandler i mam problem z obsługą pewnych typów błędów:

E_ERROR - OK
E_WARNING - OK
E_PARSE - Brak sad.gif
E_NOTICE - OK
E_CORE_ERROR - Brak pomysłu jak "sztucznie" wywołać
E_CORE_WARNING - Brak pomysłu jak "sztucznie" wywołać
E_COMPILE_ERROR - Brak pomysłu jak "sztucznie" wywołać
E_COMPILE_WARNING - Brak pomysłu jak "sztucznie" wywołać
E_USER_ERROR - OK
E_USER_WARNING - OK
E_USER_NOTICE - OK

Przykładowo, testuję to tak:

  1. <?php
  2. include ('plik_z_klasa.class.php');
  3. $e = new Error();
  4.  
  5. //symulacje bledow
  6. ...
  7. echo 'test'
  8. ...
  9.  
  10. ?>


Wiadomo teraz że przy echo wywala Parse Error, ale nie jest to obługiwane przez moją klasę tylko przez defaultowy handler. Jak "przepuszczać" wszystkie błędy przez moją klasę. Co źle robię?


BTW, ma ktoś pomysł jak zasymulować resztę błędów? winksmiley.jpg
M4chu
Cytat(radziel @ 2005-04-11 14:45:42)
(...) na php Początkujący trochę za trudny, a na php Pro - za ... banalny?

Problem nie jest az taki trudno, bo wystarczy otworzyc manuala (!) i poszukac w komentarzach (obsluguje compile i parse):
  1. <?php
  2.  
  3. function fatal_error_handler($buffer) {
  4. if (ereg(&#092;"(error</b>:)(.+)(<br)\", $buffer, $regs) ) {
  5.  $err = preg_replace(&#092;"/<.*?>/\",\"\",$regs[2]);
  6.  error_log($err);
  7.  return \"ERROR CAUGHT check log file\";
  8. }
  9. return $buffer;
  10. }
  11.  
  12. function handle_error ($errno, $errstr, $errfile, $errline)
  13. {
  14.  error_log(\"$errstr in $errfile on line $errline\");
  15.  if($errno == FATAL || $errno == ERROR){
  16.  ob_end_flush();
  17.  echo \"ERROR CAUGHT check log file\";
  18.  exit(0);
  19.  }
  20. }
  21.  
  22. ob_start(\"fatal_error_handler\");
  23. set_error_handler(\"handle_error\");
  24.  
  25. //causes a warning
  26. preg_replace();
  27.  
  28. //would normally cause a fatal error, but instead our output handler will be calle
  29.  allowing us to handle the error.
  30. somefunction();
  31. ob_end_flush();
dasko
Właśnie się bawię w ErrorHandlera i zauważyłem iż:
  • Parse Errora, E_COMPILE_ERRORa i E_CORE_ERRORa nie da się obsłużyc, nawet poprzez ob.
  • Fatal Errory(E_ERROR) nie idą do ErrorHandlera, ale można je obsłuzyć buforowaniem wyjścia(maksymalnie jeden, jedyny i ostatni).
  • Warningi(E_WARNING, E_COMPILE_WARNING, E_CORE_WARNING) nie kończą pracy skryptu, można je normalnie obsłużyć.
Te sytuacje zachodzą w PHP5, nie wiem jak wygląda ich obsługa we wcześniejszych wersjach dry.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-2024 Invision Power Services, Inc.