Warning: Cannot modify header information – headers already sent
Publicado el 18 de junio de 2008Estoy trabajando en un desarrollito con PHP, y me surgió el siguiente error:
Warning: Cannot modify header information - headers already sent by (output started at /servidor/archivo.php:07) in /servidor/directorio/archivo.php on line 666
Buscando por ahí, leí que es un un error conocido como “whitespace problem” o problema del espacio en blanco. Se debe a que algunos editores de texto agregan espacios en blanco o líneas vacías al final de un archivo tras ser editado.
Aparentemente se da muy seguido ya que devuelve bastantes resultados en Google, tanto con algunas palabras clave del error como con “whitespace problem php“. Dejo la solución por si a alguno le pasa. Es tan simple como eliminar el espacio en blanco al final del archivo (el que que describe en “output started at”) en la línea que se indica.
Me pasó una vez sola por ahora con Geany, pero nunca había pasado. De todas formas, lo edité con Vim por las dudas, y el problema no volvió a presentarse.
En los comentarios Imzyos nombra una situación más donde se puede dar este error y Tuxie explica más en detalle el problema.
Imzyos 18 junio. 2008 - 05:03
Vaya si es un problema, a mi me tuvo un rato buscándole la solución, como nota, si bien en general la solución es buscar el espacio en blanco, hay otro forma en que se puede este warning de php y es que algunos editores agregan el BOM al archivo y al no ser capaces de mostrarlo permanece invisible
jk 18 junio. 2008 - 11:49
Ok, veamos de nuevo el error, detengamonos un momento en esta parte “on line 666″…
Que me ha corrido un frio a todo lo largo de /dev/backbone…
Esto es claramente obra de algun ente maligno que vive en /dev/shadows…
cuidadin cuidadin…
🙂
tuxie_ 18 junio. 2008 - 12:22
En realidad el problema esta al comienzo del archivo, no al final. El tema es que primero manda los headers, luego la data que ve el usuario. Si ya se mandó data, no puede “volver hacia atras” por eso tira ese error.
Es muy común que suceda por un espacio en blanco o una línea en blanco al comienzo del archivo en cuestión y te roba varias horas y dolores de cabeza encontrarlo. Otra perlita de PHP…
Saludos!
fernando 19 junio. 2008 - 05:22
jk: JAJAJA! Me mató lo de /dev/backbone y /dev/shadows! En verdad lo escribí yo de gusto, no había error en esas líneas…
Imzyos, tuxie, gracias por extender el conocimiento, edité el post e hice referencia a sus comentarios.
Saludos y gracias por comentar!
David Martínez 19 junio. 2008 - 07:19
Una buena práctica es nunca cerrar con ?> los archivos, ya que el intérprete de PHP no lo requiere. De ese modo nunca tendrás espacios al final. Se recomienda, por ejemplo, en el “Coding Standard” de Zend Framework: http://framework.zend.com/manual/en/coding-standard.php-file-formatting.html
Sanva 20 junio. 2008 - 10:30
PHP es flexible, muy flexible, y eso permite que pueda ser usado de una forma poco correcta… pero eso no es un defecto atribuible al lenguaje.
Lo que yo recomendaría es utilizar PHP para lo que sirve, programar. Programar lo que hace la aplicación, no lo que se ve… es decir, utilizar un sistema de plantillas para la presentación del contenido, para la vista de la aplicación. Ver un sólo
echo
,printf
o similar por el código es sin duda un ejemplo de que esa aplicación está mal diseñada.fernando 23 junio. 2008 - 16:44
David, Sanva, gracias por los aportes. En verdad no he programado mucho en PHP, más que un semestre en la carrera, y alguna otra cosa chica como proyecto personal.
Pero me gusta bastante el lenguaje y el entorno web, así que en algún momento pienso ponerme en serio con PHP. Todavía tengo mucho que aprender al respecto.
Estoy de acuerdo con eso, es el arma de doble filo de los lenguajes flexibles.
Diego Alejandro Velez 5 septiembre. 2008 - 13:55
a muchas personas les suele pasar que crean un nuevo archivo php en dreamweaver o frontpage y escriben el codigo php dentro de las etiqutas es cuando les puede sacar tambien este error “Warning: Cannot modify header information – headers already sent by (output started at /servidor/archivo.php:07) in /servidor/directorio/archivo.php on line 666” el codigo php para un email por ejemplo debe ser sin etiquetas html.
Madnuel 21 abril. 2010 - 01:16
Gracias, estaba vuelto loco buscando por toda la red la solución a este problema. Resulta que yo uso el editor Notepad++ y estaba guardando los archivos usando un formato UTF-8. Cambie la opcion de formato a UTF-8 sin BOM, guarde el archivo que me indicaba el error con dicho formato y listo! problema resuelto! 🙂
fernando 21 abril. 2010 - 01:42
¡Me alegro que haya servido la solución!
Saludos!
Guillermo 10 septiembre. 2010 - 23:45
Gracias Muchachos. Yo tambien uso el Notepad++ y este error me estaba volviendo loco, es la primera vez que uso este Programa y no sabioa esto..
Isaias Martinez 2 febrero. 2012 - 23:05
Hola despues de buscar y de intentar solucionar este error que me daba en la linea 57 donde tenia lo siguiente:
( header(sprintf(“Location: %s”, $insertGoTo));) que en realidad no se que carajos hacia ahi, pero no podia solucionar el error asi que secidi borrarlo aunque de antemano dije es estupido me va a dar un error peor y cual fue mi sorpresa que no en realidad no me volvio el error asi que lo borre y lo publique agregando una nota por si valia madre el error jajaja pero espero que no me de mas y que le sirva a alguien mas
Dante Contreras 30 abril. 2012 - 07:30
Pues no se si sirva pero yo lo que hice despues de buscar y no encontrar esos espacios en blanco fue poner el ob_start(); antes que todo, al principio del documento y asunto arreglado…
aqui esta el cacho de codigo para que se den una idea
y todo lo demas.
Uso dreamweaver para programar en php.
saludos y espero les sirva mi experiencia
Mike 24 julio. 2012 - 11:02
Gracias, me ayudó mucho la información, busqué y busqué espacios en blanco, al igual que tú,, pero la solución que propones es la que sirvió….. GRACIAS 🙂
Elí 7 marzo. 2013 - 11:35
A mi también me funcionó esta sugerencia, buena Dante!
Julian 17 septiembre. 2013 - 17:47
Un éxito, me solucionó la vida lo del ob_start();
alex 25 abril. 2014 - 13:18
muy buenon ob_start(); resolvio mi problema
Daniel 23 diciembre. 2014 - 04:58
Idem. Solucionado, gracias amigo Dante, un saludo!
Leo 5 enero. 2015 - 16:40
Idoloooooo!! me rompi la cabeza 3 horas y con ob_start() se soluciono!, graciaaaaaaaas!
Jc 23 marzo. 2016 - 20:38
Exelente
Marcelo 5 marzo. 2013 - 07:49
Aparte de lo antes comentado y que quizá funcionó para muchos (borrar los espacios en blanco al inicio y final del archivo wp-config.php) particularmente tuvo en mi efecto cuando también le guardé al archivo editado wp-config.php con la codificación ANSI (en vez de UTF-8) y luego volví a subir el archivo. SOLUCIONADO.
lo leí en otro post y realmente me salvó de seguir probando y probando otras estúpidas cosas después de haber migrado a Rackspace desde Godaddy. Sencillamente este error aparece en todos mis sitios migrados!.
Saludos
Abraham 14 marzo. 2013 - 15:26
Amigo, eres una máquina… migré mi foro a otro host y no daba con la solución.
Eres el amo. Borrar el espacio al final del archivo y como por arte de magia, todo milagrosamente solucionado. Menuda perla de php.
Estuve reinstalando copias de seguridad, restaurando bases de datos desde fuera y desde dentro de phpmyadmin, poniendo tickets de ayuda al soporte técnico de mi host.
Nada me sirvió, excepto tu solución.
MIL GRACIAS!!!!!!
Diego 21 marzo. 2013 - 11:31
Despues de volverme loco por un par de horas, me di cuenta q me habia quedado un archivo codificado con UTF8, lo pase a ANSI y salio andando.
javier 10 abril. 2013 - 12:11
Buenas dias … eh leido los comentarios y fui tratando de hacer las sugerencias pero no me funciona.
Tengo un login.html, con un form, el submit del form me lleva a ControlUsuario.php, es ahi el problema que tengo, me da este error
Warning: Cannot modify header information – headers already sent by (output started at D:\INETPUB\VHOSTS\cipped.com.uy\apro\Solicitud\conectarDominio.php:15) in D:\INETPUB\VHOSTS\cipped.com.uy\apro\Solicitud\ControlUsuario.php on line 22
y este es el codigo php de mi pagina
me pueden ayudar.
diego | seguridad 15 mayo. 2013 - 17:48
Gracias amigos, me ha salvado! Cargaba archivos de configuracion antes de la clase que inicia la sesión. Se ha solucionado, pero solo me ha sucedido en un host? Tiene que ver la version de PHP o la configuracion del server?
Daniel Gutierrez 4 julio. 2013 - 22:40
GRacias, porque entre el tutorial y las respuestas en los comentarios pude… en mi caso era que el archivo no estaba en utf8 🙂 Saludos!
Minino 22 julio. 2013 - 22:59
Gracias, ya estaba a punto de dejar la programación y limpiar cristales en los semáforos.
marnezcam 31 diciembre. 2013 - 06:57
A mi me paso que en dos ocasiones eliminaba cookies elimine esa aliminacion y listo ya no me aparece ese error. es decir:
rene orlando 26 abril. 2014 - 14:01
que buena amigos, solucione el problema con ob_start(); pero lo raro es que localmente no me sale ese error solo cuando lo subo a un hosting, creo que el problema pasa por configuración.
Felix Bermudez 6 junio. 2014 - 19:45
Gracias amigos, resolvi mis dudas, encontre el “BOM” en Dream-weaver al momento de salvar, te vas a opciones de salvado; hay te sale el check de salvado con seguridad boom lo eliminas y listo el problema esta resuelto.
Gracias a todos los que hasta el momento an colavorado con sus comentarios.
Jorge Lopez 18 julio. 2014 - 13:27
A mi ninguna opcion me a ayudado… no se que hacer… pues cambio la codificacion pero en el host sigue utf8 y la cambio segun alla y nada… el obs_star segun me sirve pero no deja que el header redireccione a la pagina que envie los datos… y los espacios fue lo primero que hice… como hago?