Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Przechwytywanie błędów Fatal error
lucassus
post
Post #1





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 8.01.2008

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


Witam,

Kod
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 4864 bytes) in ...


Czy jest jakiś sposób przechwycenie błędów tego typu i wyświetlenie użytkownikowi ładnego komunikatu?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
szagi3891
post
Post #2





Grupa: Zarejestrowani
Postów: 109
Pomógł: 9
Dołączył: 12.03.2007
Skąd: kraków/tarnobrzeg/baranów/suchorzów

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


Jest możliwe przechwycenie tego błędu oraz da się określić w którym miejscu wystąpił. Osobiście używam klasy specjalnej która wychwytuje mi błędy / nieobsłużone wątki / oraz błędy fatall error. Po niżesz szklic tej klasy:

  1. <?php
  2. class error
  3. {
  4.  
  5. public function __construct()
  6.    {
  7.    set_error_handler(array($this, 'LoginError'));  //przechwytywanie błędów
  8.    set_exception_handler(array($this, 'LoginException'));  //przechwytywanie nieobsłużonych wyjątków
  9.    ob_start(array($this, 'ob_start')); //przechwytywanie fatalności
  10.    }
  11.  
  12. public function LoginException($wyjatek)  {
  13.   //z tym wyjątkiem można zrobić co się chce, zapisać, wyświetlić ,
  14.    }
  15.  
  16. public function LoginError($number, $message, $file, $line) {
  17.       //przechwycone błędy
  18.     }
  19.  
  20. public function ob_start($buffer)
  21.    {
  22.    if (preg_match("#(error</b>:)(.+?)(<br)#si", $buffer, $regs))
  23.        {
  24.        $komunikat = '--przechwycono błąd parsowania--';
  25.        if (isset($regs[2])) {
  26.            $komunikat = $regs[2];
  27.            $komunikat = preg_replace('#<[^<>]*>#si', '', $komunikat);
  28.            }
  29.        }
  30.    
  31.       //$komunikat -- ta zmienna zawiera treść komunikatu
  32.  
  33.    return $buffer;
  34.    }
  35. }
  36. ?>


na początku skryptu dołączam :
$errory = new error();
i mam pewność co do przechwyconych błędów łącznie z błędami fatall.
Oczywiście w tych procedurach zawarłem funkcje logujące do pliku błędy które wystąpiły. Bardzo fajna funkcją jest funkcja debug_backtrace() która zwraca tablicę kolejnych wywołań. Podstawowa informacja o błędzie plus wynik funkcji debug_backtrace() pozwala na skuteczne zlokalizowanie i usunięcie błędu.

Ten post edytował szagi3891 7.10.2008, 08:59:00
Go to the top of the page
+Quote Post

Posty w temacie


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: 17.10.2025 - 01:11