En HTML, un error casi nunca se nota: el navegador adivina y dibuja algo. PHP es estricto: si algo está mal, avisa, y su mensaje dice qué pasó, en qué archivo y en qué línea. Saber leerlo es la habilidad que más tiempo te va a ahorrar en la unidad.

Dónde aparece el error

Depende de cómo ejecutaste el archivo.

Ejecutas conEl error aparece en
php archivo.phpLa misma terminal, antes o entre la salida
php -S localhost:8000La terminal del servidor. El navegador muestra una página en blanco o HTTP ERROR 500
php -S localhost:8000 -d display_errors=1La terminal y el navegador, dentro de la página

Incorrecto: mirar solo el navegador

Ubuntu instala PHP con los errores ocultos para el navegador (es lo seguro en un servidor real). Si la página sale en blanco y solo miras el navegador, no vas a saber qué pasó.

Correcto: mientras programas, levanta el servidor con display_errors

php -S localhost:8000 -d display_errors=1

-d display_errors=1 cambia esa opción solo para este servidor. El mensaje aparece en la página y además sigue en la terminal. Es el comando que usaremos en clases.

Anatomía de un mensaje

Las tres preguntas que responde cada error

 PHP Warning:  Undefined variable $nombre in /home/ana/sitio/index.php on line 12
     ---+---   ------------+-------------    ------------+------------         ^
        |                  |                             |                     `-- ¿en qué línea?
        |                  |                             `-- ¿en qué archivo?
        |                  `-- ¿qué pasó?
        `-- ¿qué tan grave? (el tipo)

Lee siempre en ese orden: el tipo te dice si la página se detuvo; la descripción te dice qué buscar; el archivo y la línea te dicen dónde.

En el navegador se ve parecido

Con display_errors activado, el mismo error aparece dentro de la página, en negrita: Warning: Undefined variable $nombre in /home/ana/sitio/index.php on line 12.

Los cuatro tipos

Tipo¿Se detiene?Qué significaEjemplo
Parse errorSí, no se ejecuta nadaEl código está mal escrito: PHP no lo puede leerFalta un ;, una comilla o una llave
Fatal errorSí, en esa líneaEl código se lee bien, pero hace algo imposibleLlamar a una función que no existe, dividir por cero
WarningNo, sigue ejecutandoAlgo salió mal y el resultado probablemente está incompletoUsar una variable que no existe, leer una posición que no está
DeprecatedNoFunciona, pero esa forma de escribirlo va a desaparecer en otra versiónFunciones antiguas de PHP

Incorrecto: ignorar un Warning porque "la página se ve"

Un Warning significa que PHP usó un valor vacío en lugar del que esperabas. La página se ve, pero con un dato faltante. Un programa que muestra un Warning no está terminado.

Correcto: cero mensajes antes de dar algo por terminado

Una página está lista cuando no muestra ningún mensaje de PHP, ni en el navegador ni en la terminal del servidor.

Los errores que más vas a ver

Parse error: falta el punto y coma

<?php
$curso = "Diseño Web"
echo $curso;
PHP Parse error:  syntax error, unexpected token "echo" in /home/ana/prueba.php on line 3

La línea 3 está bien. El ; falta en la línea 2: PHP lo nota cuando encuentra el echo siguiente.

Parse error: una llave sin cerrar

<?php
if (true) {
    echo "Hola";
PHP Parse error:  Unclosed '{' on line 2 in /home/ana/prueba.php on line 4

Este mensaje trae dos líneas: la llave se abrió en la 2 y el archivo terminó (línea 4) sin cerrarla.

Warning: la variable no existe

<?php
$nombre = "Ana";
echo "Hola, $nombe";
echo "\nFin";
PHP Warning:  Undefined variable $nombe in /home/ana/prueba.php on line 3
Hola, 
Fin

El programa siguió (se imprimió “Fin”), pero el saludo quedó sin nombre. Casi siempre es un error de tipeo: $nombe en vez de $nombre.

Fatal error: la función no existe

<?php
echo "Antes\n";
echo fecha("Y");
echo "Después\n";
Antes
PHP Fatal error:  Uncaught Error: Call to undefined function fecha() in /home/ana/prueba.php:3

La función se llama date(), no fecha(). “Después” no se imprime: el programa se detuvo en la línea 3.

Lo que viene después de "Stack trace"

Bajo un Fatal error aparece un bloque Stack trace: #0 {main}. Es el camino de funciones que llevó al error; mientras tus programas sean de un solo archivo, puedes ignorarlo. Lo importante está en la primera línea.

Método para resolver un error

  1. Lee la primera línea del mensaje, no la última.
  2. Mira el tipo: ¿Parse (no se ejecutó nada) o Warning (se ejecutó con un hueco)?
  3. Abre el archivo que indica (puede no ser el que estás mirando).
  4. Ve a la línea: en VSCode, Ctrl + G y el número.
  5. Si la línea se ve bien, revisa la anterior.
  6. Corrige un error, guarda y recarga. Muchas veces el primer error causa los siguientes.

Correcto: copiar la descripción, no la ruta

Si vas a buscar el error en internet, copia la parte que describe el problema (Undefined variable, unexpected token "echo"), sin la ruta de tu computador. Es la parte que comparte todo el mundo que tuvo el mismo error.

Pruébalo

  • Levanta el servidor sin -d display_errors=1, provoca un error y comprueba que la página sale en blanco
  • Mira la terminal del servidor: el error está ahí
  • Levanta el servidor de nuevo con -d display_errors=1 y recarga
  • Error provocado: escribe mal el nombre de una variable y lee el Warning
  • Error provocado: llama a fecha("Y") y comprueba que lo de abajo no se ejecuta

Errores comunes

SíntomaCausaSolución
Página en blanco o HTTP ERROR 500Hay un Parse o Fatal error y display_errors está apagadoMira la terminal del servidor, o levántalo con -d display_errors=1
El error indica un archivo que no estás editandoEl error está en un archivo incluido (nav.php, datos.php)Abre el archivo que dice el mensaje
Corregiste y el error sigue igualNo guardaste el archivo, o estás editando otra copiaCtrl + S y revisa la ruta del archivo en la pestaña de VSCode
Aparecen diez errores juntosUno solo provocó los demásCorrige el primero y recarga

Checkpoint

Intenta responder antes de desplegar cada pregunta.