Mi nombre es Fernando Briano y soy programador.

Warning: Cannot modify header information – headers already sent

Estoy 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.

Feed de comentarios | Url para Trackbacks | Suscribirse a los posts por correo electrónico

31 comentarios en este post

  1. Avatar Imzyos 18 Junio. 2008 - 5:03 am Firefox 3.0 Windows XP

    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

  2. Avatar jk 18 Junio. 2008 - 11:49 am Galeon 2.0.4 Debian GNU/Linux

    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…
    🙂

  3. Avatar tuxie_ 18 Junio. 2008 - 12:22 pm Debian IceWeasel 3.0 Debian GNU/Linux 64 bits

    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!

  4. Avatar fernando 19 Junio. 2008 - 5:22 am Debian IceWeasel 2.0.0.14 Debian GNU/Linux

    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!

  5. Avatar David Martínez 19 Junio. 2008 - 7:19 am Firefox 2.0.0.14 GNU/Linux

    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

  6. Avatar Sanva 20 Junio. 2008 - 10:30 am Firefox 2.0.0.14 Windows XP

    Otra perlita de PHP…

    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.

    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

    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.

  7. Avatar fernando 23 Junio. 2008 - 4:44 pm Debian IceWeasel 3.0 Debian GNU/Linux

    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.

    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.

    Estoy de acuerdo con eso, es el arma de doble filo de los lenguajes flexibles.

  8. Avatar Diego Alejandro Velez 5 Septiembre. 2008 - 1:55 pm Internet Explorer 7.0 Windows XP

    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.

  9. Avatar Madnuel 21 Abril. 2010 - 1:16 am Google Chrome 4.1.249.1045 Windows 7

    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! 🙂

  10. Avatar Guillermo 10 Septiembre. 2010 - 11:45 pm Internet Explorer 7.0 Windows XP

    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..

  11. Avatar Isaias Martinez 2 Febrero. 2012 - 11:05 pm Safari 534.52.7 Mac OS

    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

  12. Avatar Dante Contreras 30 Abril. 2012 - 7:30 am Google Chrome 18.0.1025.162 Windows 7

    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

  13. Avatar Marcelo 5 Marzo. 2013 - 7:49 am Google Chrome 25.0.1364.97 Windows 7

    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

  14. Avatar Abraham 14 Marzo. 2013 - 3:26 pm Google Chrome 25.0.1364.172 Windows 7

    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!!!!!!

  15. Avatar Diego 21 Marzo. 2013 - 11:31 am Firefox 19.0 Windows 7

    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.

  16. Avatar javier 10 Abril. 2013 - 12:11 pm Firefox 19.0 Windows 7

    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.

  17. Avatar diego | seguridad 15 Mayo. 2013 - 5:48 pm Google Chrome 26.0.1410.64 Windows XP

    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?

  18. Avatar Daniel Gutierrez 4 Julio. 2013 - 10:40 pm Google Chrome 27.0.1453.116 Mac OS

    GRacias, porque entre el tutorial y las respuestas en los comentarios pude… en mi caso era que el archivo no estaba en utf8 🙂 Saludos!

  19. Avatar Minino 22 Julio. 2013 - 10:59 pm Google Chrome 28.0.1500.72 Windows 7

    Gracias, ya estaba a punto de dejar la programación y limpiar cristales en los semáforos.

  20. Avatar marnezcam 31 Diciembre. 2013 - 6:57 am Firefox 26.0 Windows 8

    A mi me paso que en dos ocasiones eliminaba cookies elimine esa aliminacion y listo ya no me aparece ese error. es decir:

    if((cook_usuario == $Usuario) && (cookpass == $pasword))
    {
          //AQUI MI ERROR
          IF($IDUS=$QUERY)
          {
                  $IDUS_ = $QUERY[0]
          }
          ELSE
          {
           setcookie("usNicksoin","x", time() -3600);
    	setcookie("usPasssoin","x", time() -3600);
          }
    }
    else
    {
                            setcookie("usNick","x", time() -3600);
    			setcookie("usPass","x", time() -3600);
    }
  21. Avatar rene orlando 26 Abril. 2014 - 2:01 pm Google Chrome 34.0.1847.131 Windows 7

    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.

  22. Avatar Felix Bermudez 6 Junio. 2014 - 7:45 pm Firefox 29.0 Windows 7

    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.

  23. Avatar Jorge Lopez 18 Julio. 2014 - 1:27 pm Firefox 30.0 Windows 7

    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?

    Dejar un comentario

    Toasty!