Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> ErrorHandler i wyświetlanie Parse Errorów
radziel
post
Post #1





Grupa: Zarejestrowani
Postów: 103
Pomógł: 0
Dołączył: 25.04.2003
Skąd: Olsztyn

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


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 (IMG:http://forum.php.pl/style_emoticons/default/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? (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
M4chu
post
Post #2





Grupa: Zarejestrowani
Postów: 135
Pomógł: 0
Dołączył: 28.09.2003
Skąd: Rzeszów

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


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();
Go to the top of the page
+Quote Post
dasko
post
Post #3





Grupa: Zarejestrowani
Postów: 179
Pomógł: 0
Dołączył: 9.11.2004

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


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 (IMG:http://forum.php.pl/style_emoticons/default/dry.gif)

Ten post edytował dasko 11.04.2005, 17:40:30
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 3.09.2025 - 16:21