Introducción: ¿Por qué PHP se queda en silencio cuando algo sale mal?
\n\n¿Alguna vez has escrito un script en PHP, lo has ejecutado en el navegador y solo has visto... una página en blanco? Sin mensajes, sin pistas. Solo silencio y esa sensación de que algo hiciste mal. ¿Te suena familiar?
\n\nEste es uno de los problemas más comunes que enfrentan los principiantes en PHP. La pregunta «How can I get useful error messages in PHP?» en Stack Overflow tiene miles de visitas. Y no es para menos: sin mensajes de error claros, depurar se convierte en un juego de adivinanzas.
\n\nEn este artículo, veremos cómo hacer que PHP hable y te cuente exactamente qué salió mal. Aprenderás qué configuraciones controlan la visualización de errores, cómo activarlas en diferentes etapas del desarrollo y qué hacer si los errores siguen sin mostrarse. ¡Vamos allá!
\n\n¿Por qué PHP oculta los errores por defecto?
\n\nAntes de empezar a ajustar la configuración, entendamos la razón. PHP es un lenguaje que se ejecuta en el servidor. En servidores de producción, mostrar errores a los usuarios es una mala práctica. Imagina: en lugar de una página bonita de tienda online, el cliente ve algo como Fatal error: Call to undefined function. No solo es feo, sino también inseguro: un atacante podría conocer la estructura de tu código.
Por eso, los desarrolladores de PHP desactivaron la visualización de errores en el navegador por defecto. Pero en un servidor local (como OpenServer, XAMPP, MAMP) o durante el desarrollo, esto es un gran obstáculo. Vamos a solucionarlo.
\n\nMétodo 1: Activar errores desde php.ini (de forma global)
\n\nLa forma más fiable es modificar el archivo de configuración php.ini. Búscalo en la carpeta de tu PHP (o en el panel de control de tu servidor local). Ábrelo y busca (o añade) las siguientes líneas:
display_errors = On\nerror_reporting = E_ALL\n\n\n¿Qué significa esto?
\n- \n
display_errors = On: permite mostrar errores directamente en pantalla (navegador o consola). \n error_reporting = E_ALL: le dice a PHP que muestre todos los tipos de errores: desde advertencias (warnings) hasta errores fatales. \n
Después de los cambios, reinicia el servidor web (Apache, Nginx). Ahora cualquier script mostrará los errores.
\n\nImportante: En un servidor de producción, nunca dejes display_errors = On. Usa Off y configura el logging (más abajo te explico cómo).
Método 2: Activar errores directamente en el script (forma rápida)
\n\nSi no tienes acceso a php.ini (por ejemplo, en un hosting compartido) o solo quieres activar errores para un archivo concreto, usa las funciones ini_set() y error_reporting(). Añade estas líneas al principio de tu script PHP:
<?php\nini_set('display_errors', 1);\nini_set('display_startup_errors', 1);\nerror_reporting(E_ALL);\n\n// Tu código aquí\n$foo = 1/0; // Generará un Warning: Division by zero\n?>\n\n\nAnalicemos línea por línea:
\n- \n
ini_set('display_errors', 1): activa la visualización de errores en pantalla. \n ini_set('display_startup_errors', 1): activa los errores que ocurren durante el inicio de PHP (por ejemplo, si el script no puede cargarse). \n error_reporting(E_ALL): muestra todos los niveles de error. \n
Este método funciona al instante y no requiere reiniciar el servidor. Ideal para depuraciones rápidas.
\n\nMétodo 3: Usar .htaccess (para Apache)
\n\nSi tu servidor es Apache, puedes activar los errores a través del archivo .htaccess en la carpeta raíz del sitio. Añade lo siguiente:
php_flag display_errors on\nphp_value error_reporting E_ALL\n\n\nDespués de guardar el archivo, los errores se mostrarán para todos los scripts en esa carpeta y sus subcarpetas. Muy útil cuando necesitas activar la depuración rápidamente.