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.


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


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ż:


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.


3

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


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.


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');

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.