Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Jak przejąć Fatal error i inne
szajens
post
Post #1





Grupa: Zarejestrowani
Postów: 150
Pomógł: 4
Dołączył: 3.01.2010

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


Witam,


jak po wyłączeniu wyświetlania błędów:



jak je przejąć żeby wysłać bądź zapisać w jakimś pliku?

Przejrzałem sieć i jako że notice można przejąć to nie znalazłem Fatal error itd.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 14)
Pyton_000
post
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


O tak: https://blog.piotrows.pl/php-parser-error-handler/
Go to the top of the page
+Quote Post
szajens
post
Post #3





Grupa: Zarejestrowani
Postów: 150
Pomógł: 4
Dołączył: 3.01.2010

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


Dzięki za pomoc zaraz po testuje, tak myślałem że kiedyś coś podobnego mi się rzuciło tylko nie wiedziałem gdzie.

ps. Wszystko fajnie, ale co jeżeli mamy notica i fatal error, jak pobrać wszystkie a nie ostatni error?

Ten post edytował szajens 25.01.2016, 22:11:13
Go to the top of the page
+Quote Post
Pyton_000
post
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Inne błędy musisz łapać już przez error_handler

http://php.net/manual/en/function.set-error-handler.php

To co Ci podałem łapie ostatni błąd który wywala skrypt (błędy fatal itp.)
Błędy miękkie typu notice, warnind, deprecated lapiesz już ww. funkcją. Masz tam przykład jak je łapać.
Go to the top of the page
+Quote Post
szajens
post
Post #5





Grupa: Zarejestrowani
Postów: 150
Pomógł: 4
Dołączył: 3.01.2010

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


właśnie zanim napisałeś wpadłem na tą funkcje, zastanawiałem się właśnie czy trzeba używać dwóch, ale zanim napisałem już odpowiedziałeś smile.gif

Cytat
To co Ci podałem łapie ostatni błąd który wywala skrypt

da się wyłapać pierwszy a nie ostatni? //edit: teraz wyłapuje mi normalnie pierwszy, coś wcześniej pokręciłem przy testowaniu, przy połączeniu 2 funkcji można całość przenieś np z ekranu do pliku i o to mi chodziło dzięki za pomoc

Ten post edytował szajens 25.01.2016, 23:07:32
Go to the top of the page
+Quote Post
Comandeer
post
Post #6





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

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


A czy przypadkiem od PHP7 nie wystarcza łapać wyjątków dziedziczących po Error? http://php.net/Error


--------------------
Go to the top of the page
+Quote Post
szajens
post
Post #7





Grupa: Zarejestrowani
Postów: 150
Pomógł: 4
Dołączył: 3.01.2010

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


Comandeer mógłbyś rozwinąć myśl ? Jakiś przykład bo nie mogę se poradzić smile.gif
Go to the top of the page
+Quote Post
Comandeer
post
Post #8





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

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


  1. <?php
  2. try {
  3. babol();
  4. } catch( Error $e ) {
  5. var_dump( $e->getMessage() ); // Call to undefined function babol()
  6. }

Oczywiście syntaxy jest trudniej złapać, ale na to AFAIR metoda Pytona już pomoże wink.gif


--------------------
Go to the top of the page
+Quote Post
szajens
post
Post #9





Grupa: Zarejestrowani
Postów: 150
Pomógł: 4
Dołączył: 3.01.2010

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


Źle złapałem myśl, myślałem że jest od php 7 inna możliwość przejmowania błędów. Wyjątki już trochę poznałem ale do tego co chce uzyskać się nie nadają.
Potrzebuje wyłapać błędy jeżeli już będą, automatycznie.
Po prostu zamiast wyświetlić błędy na ekranie chce je wysłać mailem smile.gif
Wydaje mi się że walenie wszędzie wyjątków to strata czasu i niepotrzebny kod.

Ten post edytował szajens 26.01.2016, 22:02:30
Go to the top of the page
+Quote Post
Comandeer
post
Post #10





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

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


Cytat
Wydaje mi się że walenie wszędzie wyjątków to strata czasu i niepotrzebny kod.

Od PHP7 wszystkie błędy są z automatu wyjątkami dziedziczącymi po Error.


--------------------
Go to the top of the page
+Quote Post
szajens
post
Post #11





Grupa: Zarejestrowani
Postów: 150
Pomógł: 4
Dołączył: 3.01.2010

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


można je automatycznie wyłapywać? Bez pisania dla każdej funkcji coś w stylu
  1. throw new Exception('');


edit: chyba nie za bardzo łapie jeszcze logikę tego rozwiązania

ale nie wyobrażam sobie pisania dla każdej funkcji wyjątku


edit2: Rozumiem że set_exception_handler jest obiektowym odpowiednikiem funkcji podanej przez Pytona (register_shutdown_function)?
Zauważyłem że zwraca to samo, jedyna różnica że nie trzeba wyłączać error_raporting

Ten post edytował szajens 26.01.2016, 23:22:12
Go to the top of the page
+Quote Post
Pyton_000
post
Post #12





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


raczej set_error_handler
tyle że przyjmuje 1 parametr
Go to the top of the page
+Quote Post
szajens
post
Post #13





Grupa: Zarejestrowani
Postów: 150
Pomógł: 4
Dołączył: 3.01.2010

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


  1. <pre>
  2. <?php
  3.  
  4. //error_reporting(0);//
  5.  
  6. function exception_handler($exception) {
  7. print_r($exception->getMessage());
  8. echo "\n";
  9. }
  10.  
  11. function exception_handler_a($exception1,$exception2) {
  12. print_r($exception2);
  13. echo "\n";
  14. }
  15.  
  16.  
  17.  
  18. set_exception_handler('exception_handler');// fatal
  19. set_error_handler('exception_handler_a'); // notice
  20.  
  21.  
  22. echo $zmienna_niezdef;
  23.  
  24. echo $fgwegf;
  25. echo $fgwefegerggf;
  26. Klasa_blad::rererg();
  27. wefefwef();
  28. wefefwwsedfweef();
  29.  
  30.  
  31. ?>


wyjście:
  1. Undefined variable: zmienna_niezdef
  2. Undefined variable: fgwegf
  3. Undefined variable: fgwefegerggf
  4. Class 'Klasa_blad' not found
  5.  
  6.  


Wiec Python jesteś jednak chyba w błędzie, choć raz tongue.gif

rozumiem że w ten sposób mam to używać, że tak jest poprawnie, bo to że działa to mnie nie zadowala smile.gif
Go to the top of the page
+Quote Post
Pyton_000
post
Post #14





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Wiesz nie testowałem tego więc to są moje domniemania smile.gif
Go to the top of the page
+Quote Post
szajens
post
Post #15





Grupa: Zarejestrowani
Postów: 150
Pomógł: 4
Dołączył: 3.01.2010

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


Szukam ale nie mogę znaleźć jak w funkcji wygenerować błąd aby wyskoczył podczas jej użycia wskazując linie kodu a nie linie w funkcji, ale bez bloków try catch? Próbowałem trigger_error ale wywala mi w funkcji

edit:
w sumie można użyć:
  1. function error($message, $level=E_USER_NOTICE) {
  2. $caller = next(debug_backtrace());
  3. trigger_error($message.' in <strong>'.$caller['function'].'</strong> called from <strong>'.$caller['file'].'</strong> on line <strong>'.$caller['line'].'</strong>'."\n<br />error handler", $level);
  4. }


ale niema innego sposobu?

Ten post edytował szajens 27.01.2016, 23:31:52
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 Aktualny czas: 22.08.2025 - 09:03