Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] error handler
Forum PHP.pl > Forum > Przedszkole
ARJ
witam.
stworzyłem coś takiego:
  1. <?php
  2. define("FATAL", E_USER_ERROR);
  3. define("ERROR", E_USER_WARNING);
  4. define("WARNING", E_USER_NOTICE);
  5. error_reporting(FATAL | ERROR | WARNING);
  6. class error_handler{
  7. function error_handler($errno, $errstr, $errfile, $errline)
  8. {
  9. switch ($errno) {
  10. case FATAL:
  11. echo "<b>Krytyczny</b> [$errno] $errstr<br />n";
  12. echo " Krytyczny błąd w lini $errline pliku $errfile";
  13. echo ", php " . PHP_VERSION . " (" . PHP_OS . ")<br />n";
  14. echo "Przerwanie wykonywania skryptu!!!<br />n";
  15. exit(1);
  16. break;
  17. case ERROR:
  18. echo "<b>Błąd</b> [$errno] $errstr<br />n";
  19. break;
  20. case WARNING:
  21. echo "<b>Ostrzeżenie</b> [$errno] $errstr<br />n";
  22. break;
  23. default:
  24. echo "<b>Błąd nieznanego typu</b>: [$errno] $errstr<br />n";
  25. break;
  26. }
  27. }
  28. }
  29. ?>

w czym tkwi problem? jak to wywołać przy pomocy set_error_handler? w manualu podana jest nazwa funkcji w "". próbowałem to wywoływać na kilka różnych sposobów ale żaden nie działa. najwyżej na początku strony wyrzuca mi: Błąd nieznanego typu[]. co z tym zrobić? od razu mówie że mam php4.
siemakuba
no, musisz zarejestrowac error_handler tak jak napisałeś:
  1. <?php
  2. set_error_handler('error_handler');
  3. ?>

i spróbuj tak:
  1. <?php
  2. trigger_error('Bład w celu testu bledow', E_USER_ERROR);
  3. ?>


nie wiem, czy takie przepisanie stałych jak wykombinowałeś coś tutaj nie miesza, chociaż na zdrowy rozum wydaje sie ze nie powinno.

pamietaj tylko o tym:
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.
(pogrubienie moje)

pozdr.
ARJ
no niby tak powinno być. tyle tylko że to jest klasa error_handler. gdy próbuje to wywołać poprzez $eh = set_error_handler("error_handler"); nic się nie dzieje. gdy najpierw tworze klase
  1. <?php
  2. $eh = new error_handler();
  3. $old_error_handler = set_error_handler($eh->error_handler());
  4. ?>

wtedy na stronie pojawia się Błąd nieznanego typu: [].
właśnie nie wiem jak to uruchomić. chciałbym żeby to była klasa bo mam zamiar dorzucić tam jeszcze jakąś funkcję.
siemakuba
Cytat
tyle tylko że to jest klasa error_handler.

o damn, sorki... nie zauważyłem :)

callbacki do klas wszędzie ustawiasz tak samo, jedna uwaga, niech ten handler nie będzie konstruktorem, ale metoda (nazwę ją eHandler):

  1. <?php
  2. //  dla istniejacej instancji klasy error handler:
  3. $eh = new error_handler();
  4. set_error_handler(array(&$eh, 'eHandler'));
  5.  
  6. // dla statycznego dostepu do metody eHandler klasy error_handler:
  7. // cos jak error_handler::eHandler();
  8.  
  9. set_error_handler(array('error_handler', 'eHandler'));
  10. ?>


powinno być ok.
pozdr.
ARJ
wielkie dzięki, działa. nie znałem czegoś takiego, bo obiekty zasadniczo zaczynam. jeszcze raz thx biggrin.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.