Ahorre 15% en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código: Skills Comenzar
Secciones
Administración Servidores virtuales

Cómo Habilitar el Reporte de Errores de PHP: Una Guía Completa para Desarrolladores

La depuración eficiente de aplicaciones PHP puede significar la diferencia entre horas de frustración y una solución rápida y limpia. Ya sea que estés construyendo una nueva aplicación web o manteniendo una existente, saber cómo habilitar y configurar la notificación de errores de PHP es una habilidad fundamental que todo desarrollador necesita. Esta guía completa cubre cada método disponible — desde correcciones rápidas en script hasta configuración a nivel de servidor — y explica cómo manejar la notificación de errores de forma segura en entornos de desarrollo y producción.

¿Qué es la notificación de errores de PHP y por qué es importante?

La notificación de errores de PHP es una característica integrada que controla qué tipos de errores, advertencias y avisos PHP muestra durante la ejecución del script. Cuando se configura correctamente, te proporciona retroalimentación inmediata y práctica sobre problemas en tu código — incluyendo errores de sintaxis, variables indefinidas, funciones obsoletas, excepciones en tiempo de ejecución y consultas de base de datos fallidas.

Por defecto, muchas configuraciones de servidor suprimen completamente la salida de errores, especialmente en entornos de producción. Esto es intencional: mostrar mensajes de error sin procesar a los usuarios finales puede exponer información sensible como rutas de archivos, credenciales de base de datos y lógica interna de la aplicación. Sin embargo, durante el desarrollo, suprimir errores hace que la depuración sea innecesariamente difícil.

Entender cómo activar y desactivar la notificación de errores — y dónde configurarla — es esencial para cualquier desarrollador que trabaje con PHP en un entorno de VPS Hosting o servidor compartido.

Niveles de error de PHP de un vistazo

PHP categoriza los errores en niveles distintos, cada uno controlado independientemente:

ConstanteDescripción
E_ERRORErrores fatales en tiempo de ejecución que detienen la ejecución del script
E_WARNINGAdvertencias no fatales en tiempo de ejecución
E_NOTICEAvisos menores sobre posibles problemas en el código
E_DEPRECATEDAdvertencias sobre funciones que se eliminarán en futuras versiones de PHP
E_PARSEErrores de análisis en tiempo de compilación
E_ALLTodos los errores, advertencias y avisos combinados

Usar E_ALL durante el desarrollo asegura que captures cada posible problema antes de que llegue a producción.

Método 1: Habilitar la notificación de errores de PHP directamente en tu script

La forma más rápida de habilitar la notificación de errores es agregar dos líneas al principio de tu archivo PHP, antes de cualquier otra salida. Este enfoque es ideal para depurar rápidamente un script específico sin modificar archivos de configuración a nivel de servidor.

<?php
error_reporting(E_ALL);          // Report all types of errors
ini_set('display_errors', 1);    // Display errors directly in the browser
ini_set('display_startup_errors', 1); // Also show errors during PHP startup
?>

Qué hace cada línea

  • error_reporting(E_ALL) — Establece el nivel de notificación de errores para capturar cada categoría de error, incluyendo avisos, advertencias, alertas de obsolescencia y errores fatales. También puedes combinar constantes específicas usando operadores bit a bit, por ejemplo E_ALL & ~E_NOTICE para excluir avisos.
  • ini_set('display_errors', 1) — Instruye a PHP para que envíe mensajes de error directamente al navegador o línea de comandos. Establecer esto en 0 oculta los errores de la salida sin desactivar su registro.
  • ini_set('display_startup_errors', 1) — Habilita la notificación de errores que ocurren durante la secuencia de inicio de PHP, que display_errors solo no cubre.

> Importante: Siempre coloca estas líneas al principio absoluto de tu script. Si ocurre un error de análisis fatal antes de que se alcancen estas líneas, no tendrán efecto. Para errores de análisis, debes configurar la notificación de errores a nivel de php.ini en su lugar.

Cuándo usar este método

Este método es más adecuado para:

  • Depurar un script o módulo único rápidamente
  • Entornos de alojamiento compartido donde carecas de acceso a php.ini
  • Sesiones de depuración temporal durante el desarrollo activo

Método 2: Habilitar la notificación de errores de PHP a través de php.ini (Recomendado)

Para una configuración persistente a nivel de servidor, modificar el archivo php.ini es el enfoque más confiable. Los cambios realizados aquí se aplican globalmente a todos los scripts PHP que se ejecutan en el servidor, lo que lo convierte en el método preferido para entornos de desarrollo dedicados.

Paso 1: Localiza tu archivo php.ini

La ubicación de php.ini varía según tu sistema operativo, versión de PHP y servidor web. La forma más fácil de encontrarlo es crear un archivo PHP temporal que contenga lo siguiente:

<?php
phpinfo();
?>

Carga este archivo en tu servidor, ábrelo en un navegador y busca la entrada “Loaded Configuration File”. Esto mostrará la ruta exacta del archivo php.ini activo.

Las ubicaciones predeterminadas comunes incluyen:

  • Linux (Apache): /etc/php/8.x/apache2/php.ini
  • Linux (CLI): /etc/php/8.x/cli/php.ini
  • Linux (Nginx + PHP-FPM): /etc/php/8.x/fpm/php.ini
  • Windows (XAMPP): C:xamppphpphp.ini
  • macOS (MAMP): /Applications/MAMP/conf/php/php.ini

> Recordatorio de seguridad: Elimina o restringe el acceso a tu archivo phpinfo() inmediatamente después de usarlo. Expone datos detallados de configuración del servidor que podrían ser explotados.

Paso 2: Edita el archivo php.ini

Abre el archivo php.ini usando un editor de texto o a través de SSH en tu servidor:

sudo nano /etc/php/8.x/apache2/php.ini

Localiza las siguientes directivas y actualízalas como se muestra:

Antes (valores predeterminados típicos de producción):

display_errors = Off
display_startup_errors = Off
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
log_errors = On

Después (configuración de desarrollo):

display_errors = On
display_startup_errors = On
error_reporting = E_ALL
log_errors = On
error_log = /var/log/php/error.log

Paso 3: Reinicia tu servidor web

Después de guardar los cambios, reinicia el servidor web para aplicar la nueva configuración:

Para Apache:

sudo systemctl restart apache2

Para Nginx con PHP-FPM:

sudo systemctl restart php8.x-fpm
sudo systemctl restart nginx

Para XAMPP en Windows:

Abre el Panel de control de XAMPP y haz clic en Stop y luego Start junto a Apache.

Método 3: Habilitar la notificación de errores a través de .htaccess (Solo Apache)

Si estás en un entorno de alojamiento compartido sin acceso directo a php.ini, y tu servidor ejecuta Apache, puedes anular la configuración de PHP usando un archivo .htaccess colocado en el directorio raíz de tu sitio web.

php_flag display_errors On
php_flag display_startup_errors On
php_value error_reporting 32767
php_flag log_errors On
php_value error_log /home/yourusername/logs/php_errors.log

El valor numérico 32767 corresponde a E_ALL en PHP. Este método es particularmente útil en planes de Alojamiento web compartido donde el acceso a la configuración a nivel de servidor es limitado.

> Nota: Este método solo funciona si tu proveedor permite anulaciones de directivas PHP a través de .htaccess. Algunos proveedores desactivan esto por razones de seguridad.

Método 4: Configurar la notificación de errores en entornos de desarrollo local

Si ejecutas un stack de desarrollo local como XAMPP, MAMP o WAMP, el proceso es sencillo.

XAMPP (Windows / Linux / macOS)

  1. Abre el Panel de control de XAMPP
  2. Haz clic en Config junto a Apache
  3. Selecciona PHP (php.ini) del menú desplegable
  4. Aplica la configuración de desarrollo descrita en el Método 2
  5. Reinicia Apache desde el Panel de control

MAMP (macOS)

  1. Abre Preferencias de MAMP
  2. Navega a la pestaña PHP
  3. Haz clic en el botón php.ini para abrir el archivo de configuración
  4. Aplica la configuración de desarrollo y guarda
  5. Reinicia los servidores de MAMP

Entornos basados en Docker

Si usas Docker para desarrollo local, puedes pasar valores de configuración de PHP directamente a través de variables de entorno o montar un archivo php.ini personalizado:

RUN echo "display_errors = On" >> /usr/local/etc/php/conf.d/custom.ini
RUN echo "error_reporting = E_ALL" >> /usr/local/etc/php/conf.d/custom.ini

Probando tu configuración de notificación de errores

Una vez que hayas habilitado la notificación de errores usando cualquiera de los métodos anteriores, verifica que funcione correctamente introduciendo deliberadamente un error en un script de prueba:

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Intentional error: undefined variable
echo $undefinedVariable;

// Intentional warning: wrong argument count
strlen();

// Intentional notice: undefined array key
$array = [];
echo $array['missing_key'];
?>

Si la notificación de errores está configurada correctamente, PHP mostrará avisos y advertencias para cada uno de estos problemas. Deberías ver una salida similar a:

Notice: Undefined variable: undefinedVariable in /var/www/html/test.php on line 5
Warning: strlen() expects exactly 1 argument, 0 given in /var/www/html/test.php on line 8
Notice: Undefined index: missing_key in /var/www/html/test.php on line 12

Desactivar la visualización de errores y registrar errores en producción

Una vez que tu aplicación esté lista para implementación, nunca debes mostrar mensajes de error a los usuarios finales. Los errores expuestos pueden revelar:

  • Rutas de archivos absolutas en el servidor
  • Nombres de tablas de base de datos y estructuras de consultas
  • Detalles de versión de PHP y extensiones
  • Lógica de aplicación y datos de configuración

Esta información es un riesgo de seguridad significativo y puede ser explotada por actores maliciosos. En su lugar, configura PHP para registrar errores silenciosamente en un archivo.

Configuración recomendada de php.ini para producción

display_errors = Off
display_startup_errors = Off
error_reporting = E_ALL
log_errors = On
error_log = /var/log/php/production_errors.log

Observa que error_reporting permanece establecido en E_ALL incluso en producción. Esto asegura que todos los errores se capturen en tu archivo de registro para revisión, sin exponerlos a los visitantes.

Crear y asegurar el archivo de registro de errores

# Create the log directory
sudo mkdir -p /var/log/php

# Create the log file
sudo touch /var/log/php/production_errors.log

# Set appropriate ownership
sudo chown www-data:www-data /var/log/php/production_errors.log

# Restrict permissions
sudo chmod 640 /var/log/php/production_errors.log

Monitorear tus registros de errores

Puedes monitorear tu registro de errores de PHP en tiempo real usando el comando tail:

tail -f /var/log/php/production_errors.log

Esto es particularmente útil en un Servidor dedicado donde tienes acceso root completo y puedes configurar rotación de registros, alertas y herramientas de monitoreo como Logwatch o Fail2Ban.

Notificación de errores de PHP: Resumen de configuración de desarrollo vs. producción

ConfiguraciónDesarrolloProducción
display_errorsOnOff
display_startup_errorsOnOff
error_reportingE_ALLE_ALL
log_errorsOnOn
error_logOpcionalRequerido

Avanzado: Manejadores de errores personalizados

Para aplicaciones más sofisticadas, PHP te permite definir una función de manejo de errores personalizada usando set_error_handler(). Esto te da control total sobre cómo se procesan, formatean y almacenan los errores.

<?php
function customErrorHandler(int $errno, string $errstr, string $errfile, int $errline): bool {
    $timestamp = date('Y-m-d H:i:s');
    $message = "[$timestamp] Error $errno: $errstr in $errfile on line $errline" . PHP_EOL;

    // Log to a custom file
    error_log($message, 3, '/var/log/php/custom_errors.log');

    // Optionally display a friendly message to users in production
    if (ini_get('display_errors')) {
        echo "<pre>$message</pre>";
    }

    return true; // Prevent PHP's default error handler from running
}

set_error_handler('customErrorHandler');
?>

Los manejadores de errores personalizados son especialmente valiosos cuando se construyen aplicaciones que requieren registro estructurado, integración con servicios de monitoreo como Sentry o Datadog, o páginas de error amigables para el usuario.

Elegir el entorno de alojamiento correcto para desarrollo de PHP

Tu entorno de alojamiento juega un papel crítico en cuán efectivamente puedas configurar y gestionar la notificación de errores de PHP. Aquí hay una descripción general rápida de lo que cada entorno ofrece:

  • Alojamiento web compartido — Acceso limitado a php.ini; confía en .htaccess o configuración en script. Mejor para proyectos pequeños.
  • VPS Hosting — Acceso root completo, control total sobre php.ini, pools de PHP-FPM y configuración del servidor. Ideal para desarrollo profesional de PHP.
  • VPS con cPanel — Combina control a nivel root con la conveniencia de una interfaz gráfica para gestionar versiones de PHP y configuración por dominio.
  • Servidores dedicados — Máximo rendimiento e aislamiento; mejor para aplicaciones PHP de alto tráfico con requisitos complejos de registro y monitoreo.

Si estás serio sobre el desarrollo de PHP y necesitas un entorno estable y configurable con control total sobre tu stack de servidor, un VPS o servidor dedicado es la opción correcta.

Preguntas frecuentes

¿Por qué mis errores de PHP no se muestran incluso después de habilitar la notificación de errores en mi script?

Esto generalmente es causado por una directiva php.ini que anula tu configuración en script, o un error de análisis que ocurre antes de que se alcance tu llamada error_reporting(). Verifica tu configuración de php.ini y considera habilitar la notificación de errores a nivel de servidor.

¿Puedo habilitar la notificación de errores solo para un directorio?

Sí. Coloca un archivo .htaccess con directivas de error de PHP en el directorio específico, o usa un archivo php.ini por directorio si tu servidor lo admite.

¿Habilitar la notificación de errores ralentiza mi aplicación?

Negligentemente. El impacto en el rendimiento de la notificación de errores en sí es mínimo. Sin embargo, escribir en archivos de registro en cada solicitud puede agregar una pequeña sobrecarga de E/S en entornos de alto tráfico.

¿Cuál es la diferencia entre display_errors y log_errors?

display_errors envía la salida de error al navegador o línea de comandos. log_errors escribe errores en un archivo. En producción, siempre usa log_errors = On con display_errors = Off.

Conclusión

Habilitar la notificación de errores de PHP