2008-12-01 12 views
21

Jaka jest najlepsza metoda ukrywania błędów PHP przed wyświetlaniem w przeglądarce?Najlepszy sposób na powstrzymanie błędów PHP na serwerach produkcyjnych

byłoby użyć następujących:

ini_set("display_errors", 1); 

Wszelkie wskazówki najlepszych praktyk będą mile widziane, jak dobrze!

Loguję błędy, chcę tylko upewnić się, że ustawienie wartości display_errors na off (lub 0) nie zapobiegnie rejestrowaniu błędów.

+0

Zrób tak, jak powiedziałem, a twoje błędy nie będą wyświetlane, ale będą rejestrowane. –

+0

Podoba mi się słowo "lepsze" niż "najlepsze". – kta

Odpowiedz

46

Najlepszym sposobem jest oczywiście rejestrowanie błędów zamiast ich wyświetlania lub ignorowania.

Ten przykład spowoduje zarejestrowanie błędów w dzienniku syslog zamiast wyświetlania ich w przeglądarce.

ini_set("display_errors", 0); 
ini_set("log_errors", 1); 

//Define where do you want the log to go, syslog or a file of your liking with 
ini_set("error_log", "syslog"); // or ini_set("error_log", "/path/to/syslog/file"); 
+0

Jako szef zastępujący "syslog" możesz umieścić ścieżkę pliku i zapisać dziennik w dowolnej lokalizacji. –

3

Zakładając, że są pod kontrolą pliku php.ini, można dokonać tych zmian globalnie wewnątrz tego pliku zamiast kodu ini_set r wokół we wszystkich plikach php (który można zapomnieć umieścić w jednym swoich plików, które mogą być złe w produkcji).

1

Można również użyć apache .htaccess do dziennika błędów bez dotykania kodu:

<IfModule mod_php5.c> 
    php_flag  display_errors Off 
    php_flag  log_errors  On 
    php_value  error_log  logs/errors 
</IfModule> 
+0

Wolę używać php.ini niż httpd.conf, to będzie jaśniejsze –

0

Najlepszym sposobem? Napraw błędy!

Jeśli potrzebujesz szybkiego tymczasowego rozwiązania, możesz wyłączyć display_errors, ale upewnij się, że gdzieś je rejestrujesz, ponieważ ustawienie to spowoduje, że poważne/parsujące błędy będą milczeć.

1

Pliki dystrybucji PHP niestety wysyłają mieszaną wiadomość o obsłudze komunikatów o błędach. Domyślny plik php.ini ma pewne ustawienia odpowiednie dla serwerów produkcyjnych, a inne lepiej dla serwerów programistycznych. Powinieneś włączyć wszystkie błędy w dev (error_reporting = E_ALL i display_errors = On) i wyłączyć w prod (display_errors = off gdzieś punkt log_errors). Postaraj się jednak, aby upewnić się, że nie ma błędów (lub są one obsługiwane).

2

ustaw zmienną środowiskową na komputerze programisty. następnie możesz sprawdzić swoje środowisko na początku kodu, aby upewnić się, że jesteś w środowisku programistycznym. następnie można ustawić poziom raportowania błędów PHP za pomocą funkcji error_reporting().

if (isset($_ENV['MY_APP_MODE']) && ($_ENV['MY_APP_MODE'] == 'devel')) { 
    error_reporting(E_ALL); 
} else { 
    error_reporting(0); 
} 
Powiązane problemy