Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] error handler
ARJ
post 30.05.2006, 14:57:10
Post #1





Grupa: Zarejestrowani
Postów: 453
Pomógł: 22
Dołączył: 20.09.2004
Skąd: Kraków - NH -

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


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.


--------------------
Warsztat: Windows 7 Pro 64bit | Apache 2.2 | PHP 5.2 | MySQL 5.0 | PHPmyadmin 2.6.4
Go to the top of the page
+Quote Post
siemakuba
post 30.05.2006, 15:41:43
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

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


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.
Go to the top of the page
+Quote Post
ARJ
post 30.05.2006, 15:52:46
Post #3





Grupa: Zarejestrowani
Postów: 453
Pomógł: 22
Dołączył: 20.09.2004
Skąd: Kraków - NH -

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


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ę.


--------------------
Warsztat: Windows 7 Pro 64bit | Apache 2.2 | PHP 5.2 | MySQL 5.0 | PHPmyadmin 2.6.4
Go to the top of the page
+Quote Post
siemakuba
post 30.05.2006, 16:02:35
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

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


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.
Go to the top of the page
+Quote Post
ARJ
post 30.05.2006, 17:26:27
Post #5





Grupa: Zarejestrowani
Postów: 453
Pomógł: 22
Dołączył: 20.09.2004
Skąd: Kraków - NH -

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


wielkie dzięki, działa. nie znałem czegoś takiego, bo obiekty zasadniczo zaczynam. jeszcze raz thx biggrin.gif


--------------------
Warsztat: Windows 7 Pro 64bit | Apache 2.2 | PHP 5.2 | MySQL 5.0 | PHPmyadmin 2.6.4
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 14:57