Cannot modify header information - headers already sent
- Detalles
- Categoría: Programación
- Última actualización el Jueves, 01 Septiembre 2011 08:01
- Escrito por cybnet
- Visto: 1243
¿Alguna vez te has encontrado con el error "Cannot modify header information - headers already sent"? Si has llegado a este artículo probablemente sí. Yo me he encontrado con este error al programar en php varias veces y la solución no siempre se encuentra facilmente y puedes tarder días en dar con ella.
Al buscar una solución para el error "Cannot modify header information - headers already sent" en google encontrarás muchas, pero que muchas entradas. Y casi todas ellas hablan de espacios en blanco antes de la etiqueta <?php, un print o un echo antes del uso de funciones php que modifican el header como header() y otras. En cualquiera de estos casos el error se produce porque se envía información al navegador antes de header y nunca, repito, nunca se puede dar salida de ninguna información antes del header. Por tanto, una solución es buscar estos fallos en tu código, por ejemplo, algo tan sencillo como esto dará el error:
<?php ?>
Si buscas estos fallos y no los encuentras puedes desesperarte. Como me ha pasado a mí. Hasta que descubrí los caracteres BOM (Byte Order Mark). Los caracteres BOM son introducidos por algunos editores de texto en Windows cuándo se utiliza codificación UTF-8. El caracter BOM es un espacio de anchura cero no separable (zero-width no-break space) que es utilizado principalmente como marca para indicar que el texto está codificado en UTF-8, UTF-16 o UTF-32. Los caracteres BOM son información que se envían al navegador, producen salida, y de ahí que generen el error del tipo "Headers already sent". Eliminar estos caracteres es facil sin necesidad de cambiar la codificación del texto. Los caracteres BOM son dificilmente visibles en cualquier editor de texto, ya que son de anchura cero, pero son visibles en el editor de texto básico de Windows.
Por tanto, cuándo se obtiene el error del tipo "Headers already sent" comprueba que antes de la salida de la información del header de la página:
- No hay una línea o espacio en blanco
- No hay texto o html que salió con un echo o similar antes del header
- No hay carga de html antes del header
- El código no contiene caracteres BOM
Aunque básicamente el problema con los caracteres BOM es el mismo que con los demás, no se habla de ellos tan frecuentemente como de los demás y estoy seguro que son el quebradero de cabeza de muchos que buscan una solución para el error php "Cannot modify header information - Headers already sent" (o similar, hay otros errores tipo "Headers already sent" como "Cannot send session cache limiter" o "Cannot send session cookie").

Encontré un script php para eliminar los caracteres BOM de forma automática....y de todos los archivos del directorio actual y subdirectorios.







RSS
Perfil
Artículos
RSS