Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Obsługa błędów typu E_PARSE oraz E_ERROR
ladovnik
post
Post #1





Grupa: Zarejestrowani
Postów: 60
Pomógł: 1
Dołączył: 25.11.2008
Skąd: Polska

Ostrzeżenie: (10%)
X----


Witam. Czy istnieje jakaś inna metoda, na obsługę błędów E_PARSE oraz E_ERROR, niż przeszukiwanie bufora - czy zawiera słowo parse error/fatal error? Ta metoda jest zawodna, ponieważ np. wystarczy aby ktoś normalnie w treść stron wstawił napis parse error i już skrypt by myślał że php wygenerowało błąd... tak więc powtarzam pytanie, czy istnieje jakaś inna metoda na obsługę tych błędów?

Pozdrawiam,
ladovnik
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
czachor
post
Post #2





Grupa: Zarejestrowani
Postów: 897
Pomógł: 40
Dołączył: 16.12.2003
Skąd: Warszawa

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


set_error_handler" title="Zobacz w manualu PHP" target="_manual?


--------------------
how many SEO experts does it take to change a light bulb,lightbulb,light,bulb,lamp,lighting,switch,sex,xxx
5-Reasons-why-you-should-NEVER-fix-a-computer-for-free
Go to the top of the page
+Quote Post
erix
post
Post #3





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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.


tongue.gif

Cytat
tak więc powtarzam pytanie, czy istnieje jakaś inna metoda na obsługę tych błędów?

Jeśli chodzi o walidowanie składni kodu - jedyne racjonalne rozwiązanie, to wywołanie php z parametrem -l.


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

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
ladovnik
post
Post #4





Grupa: Zarejestrowani
Postów: 60
Pomógł: 1
Dołączył: 25.11.2008
Skąd: Polska

Ostrzeżenie: (10%)
X----


Chcę po prostu zdefiniować swoją stronę błędów dla moejgo cmsa... Zrobiłem to w oparciu o ten artykuł. Na dole jest napisane, o problemach związanych z tymi błędami, które wymieniłem w temacie...

Ten post edytował ladovnik 2.03.2009, 19:18:38
Go to the top of the page
+Quote Post
erix
post
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Ale po kiego grzyba sprawdzać E_PARSE...?


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

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
kefirek
post
Post #6





Grupa: Zarejestrowani
Postów: 781
Pomógł: 256
Dołączył: 29.06.2008

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


  1. <?php
  2. function moja_obsluga_bledow($numerbl, $ciagbl, $plikbl, $liniabl)
  3. {
  4.  echo "<p>bład wystspił w linii $liniabl pliku '$plikbl'</p>";
  5. if ($numerbl == E_USER_ERROR)
  6. {
  7. echo '<p>Bład krytyczny</p>';
  8. }
  9. }
  10.  
  11. set_error_handler('moja_obsluga_bledow');
  12. ?>
Go to the top of the page
+Quote Post
ladovnik
post
Post #7





Grupa: Zarejestrowani
Postów: 60
Pomógł: 1
Dołączył: 25.11.2008
Skąd: Polska

Ostrzeżenie: (10%)
X----


Bo jeśli jest strona, której oglądalność wynosi 1000 online, to gdy nagle ktoś spowoduje błąd PARSE, to zamiast brzydkiej strony z błędem php, 1000 osób zobaczy jakaś konkretna stronę, np. z informacją o problemach technicznych...
Go to the top of the page
+Quote Post
erix
post
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Nikt Ci nie spowoduje błędu E_PARSE, jeśli nie będziesz grzebał w skryptach. Nie ma takiej możliwości.

A nie bez powodu przytoczyłem Ci odpowiedni fragment z manuala, aby Ci udowodnić, że nie jesteś w stanie (AFAIK) sprawdzić błędów, na których sprawdzeniu Ci zależy.

Do celów produkcyjnych IMHO wystarczy Ci to, co dostałeś w set_error_handler" title="Zobacz w manualu PHP" target="_manual; resztę powinien obsłużyć standardowy błąd 500 serwera (poszukaj, jak ustawić własną stronę błędów przez .htaccess).

edit@~kefirek: i po co to...?


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

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
kefirek
post
Post #9





Grupa: Zarejestrowani
Postów: 781
Pomógł: 256
Dołączył: 29.06.2008

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


  1. <?php
  2. trigger_error('blad', E_USER_NOTICE);
  3. trigger_error('blad', E_USER_WARNING);
  4. trigger_error('blad', E_USER_ERROR);
  5. ?>
Go to the top of the page
+Quote Post
ladovnik
post
Post #10





Grupa: Zarejestrowani
Postów: 60
Pomógł: 1
Dołączył: 25.11.2008
Skąd: Polska

Ostrzeżenie: (10%)
X----


Widzę, że mnie nie rozumiesz...
Zrobiłem sobie w oparciu o tamten artykuł funkcję:
  1. <?php
  2. function errorHandler($errno,$errstr,$errfile,$errline)
  3. {
  4.    echo "<code>r\n";
  5.    echo "<b>Error type:</b> ";
  6.    switch ($errno)
  7.    {
  8.        case E_WARNING: echo "E_WARNING"; break;
  9.        case E_NOTICE: echo "E_NOTICE"; break;
  10.        case E_USER_ERROR: echo "E_USER_ERROR"; break;
  11.        case E_USER_WARNING: echo "E_USER_WARNING"; break;
  12.        case E_USER_NOTICE: echo "E_USER_NOTICE"; break;
  13.    }
  14.    echo "<BR>r\n";
  15.    echo "<b>Error:</b> ".$errstr."<BR>r\n";
  16.    echo "<b>File:</b> ".$errfile."<BR>r\n";
  17.    echo "<b>Line:</b> ".$errline."<BR>r\n";
  18.    
  19.    echo "</code>r\n";
  20.    
  21.    exit;
  22. }
  23. set_error_handler("errorHandler");
  24. ?>


I chciałem dodać obsługę błędu PARSE... np. jeśli webmaster zmienia coś w skrypcie, wyśle na serwer a tu błąd... i żeby się wyświetliła moja strona błędu, anie ta co PHP generuje domyślnie... (nie podawałem wam swojego szablonu tylko sam ogólny kod funkcji, bo i po co...).
Go to the top of the page
+Quote Post
erix
post
Post #11





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Nie sprawdzisz tego, ponieważ wtedy jest generowany błąd uniemożliwiający dalsze działanie skryptu - działanie skryptu jest PRZERYWANE.

Już raz cytowałem manuala, cytuję raz drugi:
Kod
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.

Wniosek: nie da się. Składnię sprawdzisz wyłącznie tak, jak podałem.


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

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
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: 20.08.2025 - 11:33