Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Obsługa błędów typu E_PARSE oraz E_ERROR
Forum PHP.pl > Forum > PHP
ladovnik
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
erix
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.
ladovnik
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...
erix
Ale po kiego grzyba sprawdzać E_PARSE...?
kefirek
  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. ?>
ladovnik
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...
erix
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...?
kefirek
  1. <?php
  2. trigger_error('blad', E_USER_NOTICE);
  3. trigger_error('blad', E_USER_WARNING);
  4. trigger_error('blad', E_USER_ERROR);
  5. ?>
ladovnik
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...).
erix
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.