Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Przechwytywanie błędów Fatal error
lucassus
post 6.10.2008, 09:41:47
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
nospor
post 6.10.2008, 09:50:32
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Fatal errorow nie jestes w stanie przechwycic. Taki bład konczy dzialanie aplikacji


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
qbs
post 6.10.2008, 10:23:59
Post #3





Grupa: Zarejestrowani
Postów: 22
Pomógł: 1
Dołączył: 22.09.2008

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


teoretycznie mozesz uzyc czegos takiego:

  1. <?php
  2.  
  3.  
  4. class my_fatal_errors
  5. {
  6.    
  7.    public function __construct( )
  8.    {
  9.        
  10.        ob_start();
  11.    }
  12.    
  13.    public function __destruct( )
  14.    {
  15.        
  16.        if( strpos(ob_get_contents(),'Fatal error') !== false )
  17.        {
  18.            
  19.            ob_clean();
  20.            
  21.            exit( "Cos dalo ciala..." );
  22.        }
  23.    }
  24. }
  25.  
  26. $useless            = new my_fatal_errors;
  27.  
  28. sdfdfasdfa();
  29.  
  30. print "ok";
  31.  
  32. ?>


aczkolwiek moze byc dosc klopotliwe. inne errory obsluzysz poprzez set_error_handler

Ten post edytował qbs 6.10.2008, 10:24:46
Go to the top of the page
+Quote Post
szagi3891
post 7.10.2008, 07:58:05
Post #4





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


--------------------

Każdy z was jest łodzią w której
Może się z potopem mierzyć
Cało wyjść z burzowej chmury
Musi tylko w to uwierzyć!
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: 15.08.2025 - 03:30