Mie
18
Jun

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


Si te gustó éste post, podés apoyar a PicandoCódigo a través de PayPal!



8 Comentarios para “Warning: Cannot modify header information - headers already sent”

  1. Imzyos



    Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9) Gecko/2008052906 Firefox/3.0

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



    Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.13) Gecko/20080311 (Debian-1.8.1.13+nobinonly-0ubuntu1) Galeon/2.0.4 (Ubuntu 2.0.4-1ubuntu1)

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



    Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9) Gecko/2008061521 Iceweasel/3.0 (Debian-3.0~rc2-1)

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



    Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.14) Gecko/20080404 Iceweasel/2.0.0.14 (Debian-2.0.0.14-2)

    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. David Martínez



    Mozilla/5.0 (X11; U; Linux i686; es-ES; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14

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



    Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14

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



    Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9) Gecko/2008061602 Iceweasel/3.0 (Debian-3.0~rc2-1)

    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. Diego Alejandro Velez



    Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; InfoPath.2)

    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.

Dejar un comentario

Si quieres mostrar código, enciérralo entre los tags pre de esta forma:
<pre lang="L"> y </pre>, donde L es un lenguaje compatible GeSHI. Más info.

XHTML: Las siguientes tags están permitidas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="">


Al agregar un comentario en esta página, usted acepta la siguiente licencia para su publicación:
Creative Commons License Creative Commons Attribution-Share Alike 3.0 Unported License.