2012-10-06 22 views
5

Durante el desarrollo de un sistema web php, configurar E_ALL | E_STRICT a error_reporting y encargarse de todo tipo de errores, incluidos los errores de notificación, es una buena práctica.¿Qué tipos de errores deberían detener el sistema en el sistema web php lanzado?

Pero en el sistema liberado, ¿debo detener el sistema cuando se produce un error de aviso?

¿O debería detener el sistema solo cuando ocurrió E_ERROR e ignorar todos los otros errores como E_WARNING, E_NOTICE o E_STRICT?

¿Qué tipos de errores debo manejar en mi controlador de error personalizado y detener (salir) del sistema?

+2

Las advertencias definitivamente deben detener el sistema (pero no deje los controladores originales de error/excepción, escriba uno propio que no revele ninguna información de error). Los niveles de error menores son menos definitivos, pero al menos debe registrarlos y enviarse los informes a usted mismo, lo que lo motivará a solucionarlos :) – DCoder

+0

@DCoder ¡gracias por los buenos consejos! ¿Podría decirme por qué debería detener el sistema cuando se produjo E_WARNING? –

+1

En la mayoría de los casos en que la corrección es más importante que la alta disponibilidad, es preferible "fallar rápido" a "seguir adelante sin importar qué". Una advertencia generalmente significa que algo salió mal y seguir adelante solo empeorará las cosas. Considere la pregunta más común en este sitio: ["mysql_fetch_ espera el parámetro ..., boolean given"] (http://stackoverflow.com/search?q=mysql+fetch+boolean+given). Si no detienes tu script en la primera advertencia, obtendrás una larga lista de advertencias repetitivas y posiblemente incluso desordene otros datos al usar los resultados de la consulta fallida en un procesamiento posterior. – DCoder

Respuesta

4

Cuando desarrolle un código, debe ocuparse de cualquier advertencia, incluidos los avisos.

Para la producción, no debería realmente detenerse en los errores. En su lugar, puede usar set_error_handler() para administrar cualquier error, como E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE. Redirigir el cliente a la página personalizada, mostrar un mensaje personalizado para cualquier tipo de error. El punto es no dejar la información de error predeterminada.

Siempre debe tener un sistema que informe cualquier error que se encuentre (por correo electrónico o similar) en los servidores de producción y cuídelos lo antes posible.

En php.net/set_error_handler tiene muchos ejemplos que le harán la vida mucho más fácil y le ayudarán a rastrear errores y advertencias.

+0

gracias por la información útil! En todos los ejemplos de manejadores de errores en [php.net/set_error_handler](http://php.net/set_error_handler] no invoque 'exit' cuando ocurra E_WARNING (no E_USER_WARNING). ¿Cree que no necesita mostrar una pantalla de error o un mensaje a los usuarios y detener (salir) del sistema cuando se produjo E_WARNING? –

+0

Esa es su decisión, Advertencia no necesita 'salir', solo son advertencias (índices indefinidos, funciones en desuso, etc.) –

+0

gracias por su respuesta! –

Cuestiones relacionadas