¿Qué es el error Cannot Modify Header Information en PHP?
El error Cannot modify header information - headers already sent es uno de los problemas más comunes en el desarrollo web con PHP. Ocurre cuando tu script intenta enviar cabeceras HTTP (utilizando funciones como header(), setcookie() o session_start()) después de que el servidor ya ha comenzado a enviar el cuerpo de la respuesta HTML al navegador.
Causas principales del error
Existen varias razones por las cuales PHP comienza a enviar la salida antes de tiempo, interrumpiendo el flujo de las cabeceras:
- Espacios en blanco o saltos de línea antes de la etiqueta de apertura
<?phpo después de la de cierre?>. - Salida impresa accidentalmente mediante funciones como
echo,printovar_dump()antes de llamar aheader(). - Mensajes de advertencia (warnings) o errores de PHP que se muestran directamente en pantalla.
- Archivos guardados con codificación UTF-8 con BOM (Byte Order Mark), que añade caracteres invisibles al inicio del archivo.
Métodos para solucionar el error paso a paso
Método 1: Eliminar espacios en blanco y saltos de línea
El motivo más frecuente es un espacio en blanco oculto. Revisa el archivo principal donde se genera el error y sigue estos pasos:
- Abre tu archivo PHP en tu editor de código (como VS Code o PhpStorm).
- Verifica la primera línea del archivo. Asegúrate de que no haya líneas vacías, espacios ni saltos de línea antes de
<?php. - Elimina la etiqueta de cierre
?>al final del archivo si este solo contiene código PHP. Esto evita que se envíen caracteres en blanco accidentales.
Método 2: Cambiar la codificación del archivo a UTF-8 sin BOM
Si el editor añade caracteres invisibles de control al inicio del archivo, PHP los interpretará como salida de texto:
- Abre el archivo afectado en tu editor.
- Busca la opción de codificación de caracteres en la barra inferior o en el menú de configuración (por ejemplo, en VS Code aparece en la esquina inferior derecha).
- Cambia la codificación de
UTF-8 with BOMaUTF-8(a veces llamado UTF-8 sin BOM). - Guarda los cambios y vuelve a cargar tu página web.
Método 3: Utilizar el almacenamiento en búfer de salida (Output Buffering)
Si necesitas imprimir contenido antes de enviar cabeceras por la arquitectura de tu aplicación, puedes activar el almacenamiento en búfer para retener la salida hasta que esté lista:
- Abre el archivo de configuración
php.iniy busca la directivaoutput_buffering, estableciéndola enOno asignando un tamaño como4096. - Alternativamente, puedes activar el búfer al inicio de tu script principal (como
index.php) utilizando la siguiente función:
<?php
ob_start();
// Tu código que genera salida y cabeceras
header('Location: https://tusitio.com/dashboard.php');
ob_end_flush();
?>