Errores de diagnóstico

Los errores de diagnóstico, también conocidos como errores tradicionales, se utilizan para señalar diversas condiciones y pueden mostrarse y/o registrarse según se necesite. Por defecto, PHP notifica todos los errores de diagnóstico. (Antes de PHP 8.0.0, los diagnósticos E_NOTICE y E_DEPRECATED no se notificaban por defecto.)

A diferencia de los errores Throwable, la mayoría de los errores de diagnóstico no interrumpen el flujo normal de ejecución. Los diagnósticos fatales, como E_ERROR, terminan el script.

Los diagnósticos que se notifican y los que se ignoran se controlan mediante la directiva de php.ini error_reporting, o en tiempo de ejecución llamando a error_reporting(). Se recomienda encarecidamente establecer la directiva de configuración, ya que algunos errores pueden ocurrir antes de que comience la ejecución del script.

Nota:

En un entorno de desarrollo, error_reporting debería establecerse siempre a E_ALL para que los problemas señalados por PHP se noten y se corrijan. En producción, el nivel de detalle puede reducirse a E_ALL & ~E_NOTICE & ~E_DEPRECATED, aunque en muchos casos E_ALL sigue siendo apropiado, ya que puede proporcionar una alerta temprana de posibles problemas.

Lo que ocurre con los diagnósticos depende de otras dos directivas de php.ini. display_errors controla si el diagnóstico se muestra como parte de la salida del script. Esta debería estar siempre desactivada en un entorno de producción, ya que la salida puede incluir información confidencial, como contraseñas de bases de datos, pero a menudo es útil activarla en desarrollo, ya que garantiza la notificación inmediata de los problemas.

Además de mostrar los errores, PHP puede registrar los diagnósticos cuando la directiva log_errors está activada. Esto registrará cualquier diagnóstico en el fichero o en el syslog definido por error_log. Esto puede ser extremadamente útil en un entorno de producción, ya que los diagnósticos se registran cuando ocurren y después pueden generarse informes a partir de esos registros.

Los diagnósticos individuales pueden suprimirse utilizando el operador @.

Advertencia

Antes de PHP 8.0.0, era posible suprimir diagnósticos críticos que terminaban la ejecución del script PHP.

Nota:

Entre versiones de PHP, los diagnósticos pueden añadirse o eliminarse, cambiar su gravedad o elevarse a errores Throwable.

Manejador de diagnósticos definido por el usuario

Si el manejo de diagnósticos por defecto de PHP no es adecuado, es posible sustituir el manejador de diagnósticos por defecto por uno personalizado, que se establece con set_error_handler(). Algunos diagnósticos, como E_ERROR y E_PARSE, no pueden manejarse de esta forma (véase set_error_handler() para la lista completa). Los demás pueden manejarse de varias maneras. Por ejemplo, un manejador personalizado puede mostrar una página de error al usuario y notificar el error de forma más directa que un registro, por ejemplo enviando un correo electrónico.

Otro uso típico es elevar los errores de diagnóstico a excepciones con ErrorException.

Ejemplo #1 Elevar los errores de diagnóstico a excepciones

<?php
function exceptions_error_handler($severity, $message, $filename, $lineno) {
    if (error_reporting() & $severity) {
        throw new ErrorException($message, 0, $severity, $filename, $lineno);
    }
}

set_error_handler('exceptions_error_handler');

Nota:

Es importante comprobar que la gravedad está incluida en la lista actual de diagnósticos notificables; de lo contrario, el operador @ dejará de funcionar, ya que se lanzaría una excepción para un diagnóstico suprimido.

Historial de cambios

Versión Descripción
8.5.0 Los errores fatales (como un tiempo máximo de ejecución superado) ahora incluyen una traza de la pila en su mensaje de error.
+add a note

User Contributed Notes

There are no user contributed notes for this page.