¿Cómo callo los errores de PHP?


32

¿Hay alguna manera de silenciar todos los errores, advertencias y avisos de PHP en Drupal? Son útiles en el sitio de desarrollo, pero son un gran riesgo de seguridad y hacen que el sitio se vea mal en vivo.

Sé que en Drupal 6 la página admin / settings / error-reporting puede evitar que Drupal escriba errores en la pantalla, pero ¿dónde puedo encontrar esto en Drupal 7? Parece que falta.


3
Sin embargo, tenga en cuenta que los errores tienen un papel muy importante: indican que algo está mal. Suprimir eso, no resuelve el problema subyacente. Esto también se llama el "Método ruso": cuando la luz de alarma en una planta nuclear comienza a parpadear, simplemente retire la bombilla. La luz de alarma ya no parpadea; no hay problemas.
Berkes

Gracioso :). Pero solo suprimo el error en el sitio de producción.
drupal_stuff_alter

Drupal tiene la opción de decidir qué errores deben mostrarse; los errores no mostrados todavía se registran en la base de datos y se muestran en admin / reports / dblog
kiamlaluno

@kiamlaluno, en una producción que está algo bien (pero presentar un error de que un pago falló siempre es mejor que dejar a su cliente en la incertidumbre). Pero en el desarrollo y las pruebas, mi experiencia es que los errores introducidos en dblog se descuidan. Drupalsites con cientos de avisos y advertencias por hora registrados allí, no es una excepción. Y se pierden excepciones y errores reales en el ruido. Lo mejor es empujar todos y cada uno de los avisos al desarrollador.
Berkes

Correcto, pero el OP parece estar interesado en ocultar esos errores en un sitio de producción. (Véase, "Ellos son útiles en el sitio devel pero son un gran riesgo para la seguridad, y hacer que la mirada del sitio malo en vivo.")
kiamlaluno

Respuestas:


29

La ruta cambia, como en Drupal 7, la misma página que vería antes en admin / settings / error-reporting ahora está en admin / config / development / logging.

captura de pantalla


1
Por alguna razón, no puedo hacer esto. Al hacer clic en Guardar, mi selección se restablece. ¿Hay alguna manera de que pueda cambiar esto manualmente en la base de datos o algo así?
Niranjan N Raju

17

Como se sugiere, en Administration » Configuration » Development(at /admin/config/development/logging) puede encontrar la configuración para deshabilitar la visualización de mensajes de error, pero no deshabilitará completamente los errores / avisos.

Es porque Drupal 7 aplica E_ALL, por lo que todavía están escritos en syslog y puede verlos en Registros recientes que afectan el rendimiento de su sitio web.

Para deshabilitar los avisos por completo, deberá agregar la siguiente línea en su archivo settings.phpo php.ini:

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

Mostrar todos los errores, excepto avisos y advertencias de estándares de codificación.

Para silenciar todos los errores de PHP, lo cual no se recomienda, puede intentar agregar su archivo de configuración:

error_reporting(0); // Disable all errors.

Ver: error_reporting()


Código principal responsable de Drupal 7 para el E_ALLregistro (archivo:) includes/bootstrap.inc:

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

Ver también:


4

Una cosa que nadie ha mencionado que puede ser útil para las personas es que Drupal 7 ignora todos los niveles de informes de errores del sistema local. Por lo tanto, no puede usar .htaccess o incluso php.ini para establecer niveles de informes de errores de php en Drupal.

Hay un parche propuesto para esto en D8, pero actualmente en D7 está restringido a las 3 máscaras de error –todos, ninguno, o errores y advertencias– que se establecen en la página de administración indicada por kiamlaluno.


3

La configuración siempre está en admin / config / development / logging :)


¡Muchas gracias! Todavía quiero tener vivas las notificaciones verdes. Espero que no desaparezcan.
drupal_stuff_alter

2

No estoy seguro de por qué el método Drush es tan indocumentado, pero tengo en mi script de compilación:

drush vset error_level 0

... que guarda los mensajes de error en el registro pero no los muestra en la pantalla.


1

Es posible que deba agregar citas a la solución kenorb publicada anteriormente:

ini_set('error_reporting', 'E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR');

Esto está mal: esas son constantes, no se deben citar. error_reporting es un valor entero que se compone de las constantes enteras OR juntas. No es una configuración de cadena compuesta por nombres constantes como los que tienes aquí.
datashaman

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.