Warning: Cannot modify header information - headers already sent

Publicado el Miércoles, 18 de junio de 2008

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.

31 comentarios en este post

Feed de comentarios
  1. Avatar

    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

  2. Avatar

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

  3. Avatar

    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!

  4. Avatar

    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!

  5. Avatar

    Sanva 20 junio. 2008 - 10:30

    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.

  6. Avatar

    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.

    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.

  7. Avatar

    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.

  8. Avatar

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

  9. Avatar

    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

  10. Avatar

    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

  11. Avatar

    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

  12. Avatar

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

  13. Avatar

    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.

  14. Avatar

    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.

  15. Avatar

    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?

  16. Avatar

    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:

    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);
    }

  17. Avatar

    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.

  18. Avatar

    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.

  19. Avatar

    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?

Dejar un comentario

Toasty!