Como solucionar de forma rápida el error de la función header en PHP: Warning: Cannot modify header information - headers already sent …
Hace poco me encontré con un error que me dio algún dolor de cabeza darle solución. En algunas versiones de PHP la función header() no funciona y nos devuelve el siguiente warning:
Warning: Cannot modify header information - headers already sent …
Las funciones en PHP que envían o modifican encabezados HTTP deben ser invocadas antes de cualquier salida.
Leyendo en varios foros llegue a la conclusión que el problema era el siguiente: Espacios en blanco después de la etiqueta de cierre de mis archivos php (?>). Principalmente causado por:
Que se nos haya quedado algún archivo sin etiqueta de cierre (?>).
Que tengamos algún espacio después de esta etiqueta.
Que usemos algún editor de texto que inserte BOM en codificación UTF-8. El BOM (Byte Order-Mark) no se visualiza por la mayoría de los editores de texto. Es la secuencia de bytes EF BB BF, que es opcional y redundante para documentos codificados en UTF-8. Por tanto aunque creamos que no nos dejamos ningún espacio en blanco, estos bytes nos pueden estar dando problemas.
Solución que he encontrado al problema:
Pues después de varias pruebas sin éxito de dejar mis ficheros php sin espacios en blanco y darme cuenta que la tarea podía llevarme horas. Busque algún script o alguna herramienta para automatizar la solución y he aquí phptags.
phptags es una herramienta que vuelve a escribir las etiquetas de cierre y apertura de nuestros ficheros hacia formas largas y cortas, pero también fácilmente soluciona el problema del espacio inicial y final (BOM).
Una vez instalado, nos dirigimos al directorio donde se encuentran nuestros ficheros php y ejecutamos la siguiente sentencia para eliminar las etiquetas de cierre de php (?>)
phptags --unclosed *.php
Una vez eliminadas todas las etiquetas de cierre de php (?>) volvemos a insertarlas eliminando los espacios en blanco que puedan haber quedado.
phptags --closed *.php
Esta tarea puede ser un poco pesada hacerla de directorio en directorio. Por tanto podemos usar los siguientes comandos para que recorra el directorio padre de nuestro proyecto php y de forma recursiva mire todos los subdirectorios buscando los ficheros php y aplicándoles el cambio.
find . –type d exec phptags --unclosed *.php {} ;
find . –type d exec phptags --closed *.php {} ;
Última modificación: oct 4, 2024