Jak wyciszyć błędy PHP?

32

Czy istnieje sposób, aby wyciszyć wszystkie błędy PHP, ostrzeżenia i powiadomienia w Drupal? Są przydatne na stronie deweloperskiej, ale stanowią duże zagrożenie bezpieczeństwa i sprawiają, że strona wygląda źle na żywo.

Wiem, że na Drupal 6 strona admin / ustawienia / raportowanie błędów może powstrzymać Drupala przed zapisywaniem błędów na ekranie, ale gdzie mogę to znaleźć w Drupal 7? Wygląda na to, że go brakuje.

drupal_stuff_alter
źródło
3
Pamiętaj jednak, że błędy mają bardzo ważną rolę: wskazują, że coś jest nie tak. Tłumienie tego nie rozwiązuje podstawowego problemu. Jest to również nazywane „metodą rosyjską”: kiedy lampka alarmowa w elektrowni jądrowej zaczyna migać, wystarczy usunąć żarówkę. Lampka alarmowa już nie miga; bez problemów.
berkes
Zabawny :). Ale pomijam tylko błąd na stronie produkcyjnej.
drupal_stuff_alter
Drupal ma możliwość zdecydowania, które błędy powinny być wyświetlane; niewyświetlane błędy są nadal rejestrowane w bazie danych i pokazywane w admin / raporty / dblog.
kiamlaluno
@kiamlaluno, w produkcji, która jest nieco w porządku (ale błąd, który pokazuje, że płatność nie powiodła się, zawsze jest lepszy niż pozostawienie klienta w niepewności). Ale podczas opracowywania i testowania moje doświadczenie polega na tym, że błędy wprowadzone na blogu są zaniedbywane. Drupalsites z setkami powiadomień i ostrzeżeń na godzinę zalogowanymi tam, nie jest wyjątkiem. W hałasie giną prawdziwe wyjątki i błędy. Najlepiej jest wcisnąć każde ostrzeżenie w twarz dewelopera.
berkes
Zgadza się, ale OP wydaje się być zainteresowany ukryciem tych błędów na stronie produkcyjnej. (Patrz: „Są przydatne na stronie deweloperskiej, ale stanowią duże zagrożenie bezpieczeństwa i sprawiają, że strona wygląda źle na żywo.”)
kiamlaluno

Odpowiedzi:

29

Ścieżka się zmienia, tak jak w Drupal 7 ta sama strona, którą widziałeś wcześniej w admin / settings / error-reporting jest teraz w admin / config / development / loging.

zrzut ekranu

kiamlaluno
źródło
1
Z jakiegoś powodu nie jestem w stanie tego zrobić. Po kliknięciu przycisku Zapisz mój wybór jest resetowany. Czy istnieje sposób, aby to zmienić ręcznie w bazie danych lub coś takiego?
Niranjan N Raju
17

Jak sugerowano, w Administration » Configuration » Development(at /admin/config/development/logging) można znaleźć ustawienie, aby wyłączyć wyświetlanie komunikatów o błędach, ale nie spowoduje to całkowitego wyłączenia błędów / powiadomień.

To dlatego, że Drupal 7 wymusza E_ALL, więc są one nadal zapisywane w syslog i możesz je zobaczyć w ostatnich dziennikach wpływających na wydajność twojej witryny.

Aby całkowicie wyłączyć powiadomienia, musisz dodać następujący wiersz do pliku settings.phplub php.inipliku:

ini_set('error_reporting', E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);

Pokaż wszystkie błędy, z wyjątkiem powiadomień i ostrzeżeń dotyczących standardów kodowania.

Aby wyciszyć wszystkie błędy PHP, co nie jest zalecane, możesz spróbować dodać plik ustawień:

error_reporting(0); // Disable all errors.

Widzieć: error_reporting()


Odpowiedzialny kod podstawowy Drupal 7 za E_ALLlogowanie (plik includes/bootstrap.inc:):

// Enforce E_ALL, but allow users to set levels not part of E_ALL.
error_reporting(E_ALL | error_reporting());

Zobacz też:

kenorb
źródło
4

Jedną rzeczą, o której nikt nie wspomniał, która może być pomocna dla ludzi, jest to, że Drupal 7 ignoruje wszystkie poziomy raportowania błędów w systemie lokalnym. Więc nie możesz użyć .htaccess ani nawet php.ini, aby ustawić poziomy raportowania błędów php w Drupal.

Proponowana jest łatka do tego w D8, ale obecnie w D7 jesteś ograniczony do 3 masek błędów - wszystkich, żadnych, lub błędów i ostrzeżeń - które są ustawione na wskazanej stronie administratora kiamlaluno.

las
źródło
3

Ustawienia są zawsze w admin / config / development / logowanie :)

Remon
źródło
Wielkie dzięki! Nadal chcę mieć aktywne zielone powiadomienia. Mam nadzieję, że nie znikną.
drupal_stuff_alter
2

Nie jestem pewien, dlaczego metoda Drush jest tak nieudokumentowana, ale mam w skrypcie kompilacji:

drush vset error_level 0

... który zapisuje komunikaty o błędach w dzienniku, ale nie pokazuje ich na ekranie.

Matt Fletcher
źródło
1

Może być konieczne dodanie cudzysłowów do rozwiązania kenorb opublikowanego powyżej:

ini_set('error_reporting', 'E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR');
Greg Lund-Chaix
źródło
To źle - są to stałe, nie należy ich cytować. raportowanie błędów to wartość całkowita, która składa się ze stałych liczb całkowitych ORed razem. Nie jest to ciąg znaków złożony ze stałych nazw, jak już tu jesteś.
datashaman