Corregir error de “Warning: Cannot modify header information”

Haciendo un Script en PHP quise redireccionar al cliente y me doy con la sorpresa que me genera el siguiente error y no redirecciona, este es un error que generalmente lo encuentras cuando llamas a un archivo de funciones usando require o similar:

Warning: Cannot modify header information – headers already sent by (output started at /home/miweb/funciones.php:144) in /home/miweb/index.php on line 239

luego de leer mucho en internet definitivamente el problema es que en algún momento estoy enviando un echo, o print o un dato al cliente y al tratar de redireccionar me lanza el error

luego de buscar un poco mi código me todo con lo siguiente en el archivo de funciones.php

<?//Todo el contenido del archivo en PHP
?>

y encontré cual era el bendito problema 😀

A simple vista no hay error pero en mi caso (y supongo que a muchas personas) es que luego de cerrar el ?> hay un espacio en blanco el cual cuando hago el require_once o include lo interpreta como código HTML (se envía un dato y por tanto la cabecera) y cuando luego hago la redirección pues genera el error

67 Comentarios para “Corregir error de “Warning: Cannot modify header information””

  1. Muchas Gracias, en mi caso tenia un salto de linea que no veía.

  2. Muchas Gracias, genio!!!!

  3. Muy buen post, me funcionó perfectamente, gracias.

  4. Epa … ya iva a suprimir lo que estava asiendo … Se agradese 😀

  5. A mi me paso que en lapriimera linea en vez de esto “” estaba esto “”

    al no cargar el “require_once” me daba el fallo, lo modifique y se soluciono…
    les dejo ese detalle que me hizo dreamweaver trabajando con un servidor de pruebas.

  6. Muy bueno. Yo tenia el mismo error, un espacio luego del cierre ‘?>’
    Muchas gracias.

  7. Hermano , me has salvado la vida, muchas gracias por la información (y), Buena energía

  8. Xevere man ,me ayudastes de una buena. ya casi me doy.
    Gracias.

  9. Realmente buen dato, precisa la indicación… \m/

  10. La verdad eso se soluciona con incluir las siguientes llamadas en el inicio y fin del código respectivamente, después de la etiqueta de inicio de php y antes de la de cierre de php:

    ob_start();
    ob_end_flush();

    eso soluciona el problema y se evita estar mirando con microscopio el código…

    1. me funciono el metodo de ob_start(); ob_end_flush(); ahora si podre continuar. 😉

    2. Genial esa es la solucion

    3. Muchas gracias por la solución brindada, un fuerte abrazo de agradecimiento

  11. Gracias Me quedo como anillo al dedo por poco destruia mi blog por un pequeñito erro me ayudo bastante y mi blog sigue funcionando normal.

  12. QUE ONDA AMIGOS ENCONTRE EL PROBLEMA… ESE ERROR APARECE POR UTILIZAR EL HEADER PUES LO PUEDEN SOLUCIONAR ACTIVANDO EL display=on en el servidor en directivas locales quitando el display=off o la manera mas sencillaa es no utilizar el header(location: ) , yo utilize un script se los paso :
    echo (” location.href=’encuesta.php?id=1′”);

  13. echo (“AbresSCRIPT location.href=’encuesta.php?id=1′ CierrasSCRIPT”);

  14. Ayuda por favor!. este mensaje me sale solo en el aplicativo subido al website, pero en local no tengo ese problema. a que puede deberse? Les resumo: desde una pagina de login debe redirigirse al index. Me toca reescribir “index.php” luego que el logueo es exitoso.

  15. Gracias!!! Era exactamente lo que me pasaba!

  16. Gracias bro me sirvió muchisimo

  17. Una medida que uso es evitar cerrar el php (sin poner ?> ) y con eso evito ese tipo de sorpresitas. Saludos.

  18. en mi caso había un salto de línea y tuve que cambiar la codificacion de utf-8 a ANSI por que como uso wordpress no funcionaba. gracias

  19. hola amigos, podrian ayudarme, no encuentro ningun espacio (no lo veo) que programa puedo utilizar para comprobar que no haya otro error, la pagina andaba normalmente hace aproximadamente 10 dias, y desde ayer que no puedo ingresar, ni al wp-admin, ni al sitio, desde ya muchas gracias por cualquier dato que puedan brindarme

  20. amigos ya borre todos los espacion antes y despues de la web pero siguio igual ya modifique a ansi la pagina pero me sigue saliendo el error..ayuda porfa..no estoy usando wordpress ni ningun otro sino un codigo que me paso un amigo de un blod propio

  21. Hermano, te comento, que tal cual: un espacio al lado del berraco cierre de php.

    Lo tenaz del tema es que en el wamp funcionaba perfectamente, pero al subirlo al servidor que es IIS no funcionaba.

    Nuevamente muchas gracias!

  22. Gracias amigo!!! tuve el mismo problema y con tu valiosa ayuda lo encontré!!!

  23. Excelente post!
    diría yo que todo programador PHP ha pasado o tendrá que pasar por esta incomoda situación.
    Aunque para mi esta no fue la solución, me sirvió para guiarme y seguir en la busqueda, que como resultado encontré esto: http://blog.mandanwebs.com/wordpress/soluciones-para-el-error-warning-modify-header-information-headers/
    y la segunda opcion de ese blog fue mi solucion.
    (aclaro que no es mi blog y no estoy haciendo spam, sencillamente quiero compartir acá lo que a mi me sirvió)
    -Saludos colegas.

  24. Lo unico que me funciono fue reemplazar la hearder(Location: etc etc etc); por llamadas oportunas a la siguiente funcion:

    function redirect($url,$seconds){
    $ss = $seconds * 1000;
    $comando = “window.setTimeout(‘window.location=”.chr(34).$url.chr(34).”;’,”.$ss.”);”;
    echo ($comando);
    }

  25. Excelente me fue muy útil

  26. Gracias los amo!!! me funcionó el link de Jhon y la del salto de línea en el archivo funciones.php de mi tema con eso quedó perfecto 🙂

  27. ¡Excelente! Mi error era una tabulación antes de <? …
    Muchas gracias.

  28. Encontré la solición a este problema que me tomó más de 15 horas seguidas poder resolver.
    Se agradecen los post con las alternativas de solución pero nada de eso me resultó.
    Finalmente logré identificar que el problema está en los archivos de idioma. La solución es copiar el archivo que está en Inglés, pegarlo en la carpeta de Español y editarlo completo desde el server (en mi caso uso FileZilla), sin bajarlo porque ahí se enreda todo.
    Espero que les sirva!
    CE.

  29. Gracias y mil gracias. Me estaba volviendo loco.

  30. Muchhas gracias!

  31. buenas gracias lo de la funcion me funciono ahora lo usare en todo lo que haga ob_start();
    ob_end_flush();

  32. Increible!!!, Pero Cierto. Muchísimas Gracias!!!

  33. Colegas me pasé 2 horas buscando el error y no lo encontraba, ya estaba por rendirme, inclusive estaba pensando en usar las funciones del colega: fahren, pero quise insistir porque estuvo funcionando bien hasta hacía unas horas y no podía ser otra cosa que yo mismo hubiera movido algo; así que dándole la última leída a mi archivo de conexión (yo uso Dreamweaver y este programa guarda este archivo en una carpeta: Connections )
    POR FIN me di cuenta que antes de la etiqueta de apertura: <?PHP había un espacio y no lo había visto antes 🙁
    Lo borré y quedó solucionado

    estaba así:
    <?php
    ……..
    en lugar de estar así:
    <?php
    ……..

    Saludos

  34. Bueno en mi comentario anterior parece que el sistema borró el espacio que yo había dejado como ejemplo antes de la etiqueta <?php
    bueno pero ya se entiende, quise ser más ilustrativo.
    Saludos.

  35. hey bro muchas gracias por tu ayuda, ajaja ,e hubiera muerto buscando ese error

    muchas gracias 😀

  36. Buena man. nunca lo hubiera imaginado. salu2. Se agradece

  37. Buen dato. Debe revisarse bien el codigo en los espacios en blanco y lineas en blanco en todo en codigo. Gracias

  38. yo no tengo espacios luego del codigo y sigo teniendo ese error. No se qué será. Aun no esta interfiriendo en el funcionamiento del sitio web asi que supongo que no molestará, no?

  39. Muchas gracias me sirvio

  40. hermano mil gracias,estaba batallando en mi hosting y me acabas de salvar la vida

  41. Guru… tenia el mismo problema pero en otro archivo. se agradece

  42. sos un genio!!!!

  43. I love you!! haha gracias!

  44. mi error era que tenia un espacio antes de <?

  45. No se imaginan cuanto cambie, modifique, reescribí, reorganice por todo el programa, lo revise, dormía volvía a revisar etc..etc.. etc..Muchas Muchas Gracias……

  46. En mi caso, tengo mucha programación, y al igual que varios de los comentarios que he leído, me aseguré de no tener espacios antes ni después de las aperturas y cierres del php.
    La solución que encontré, por si a alguien le sirve, fue usar JavaScript en vez de php; a continuación el código:

    $_SESSION[‘seccion’] = 1; //Propio de mi sistema
    ?>
    Si su navegador no lo redirecciona, haga clic AQUI
    window.location=”/index.php”;
    <?php
    } // continuación de mi sistema

    Espero que a alguien le sirva la idea

    Saludos

  47. Se te agradece…
    Muchisimas gracias!!!!

  48. Gracias mmen, llevava dias con este fu****g error, desde hoy sere tu humilde esclavo :p

  49. buenas a todos..
    miren quisiera que me ayuden con este problema: tengo un sitio web que permite descargar archivos .zip desde una base de datos, lo que pasa es cuando doy clic en bajar el archivo(que está en la BD de un campo longblob) me abre el archivo en la misma pagina pero con basuras y lo que quiero es que me levante para descargar el archivo… lo intenté desde localhost y ahi si me funciona, pero cuando está en el sitio web ahi no me funciona y se me habre solo basura.. xfa sus ayudas es importante

    1. ya, para eso debes poner la cabecera del tipo de archivo y forzar la descarga:
      header(“Content-Transfer-Encoding: binary”);
      header(“Content-type: application/octet-stream”);
      header(“Content-Disposition: attachment; filename=$file”);
      header(“Content-Length: $size”);
      de ahi ya lo imprimes en pantalla

  50. Muchísimas gracias hermano, me estaba volviendo loco con eso. Ya le había rezado a todos los dioses del olimpo por respuestas. Te lo agradezco sinceramente.

  51. Excelente, muchas gracias.

  52. Excelente. Más de dos años después de que este post se escribiera, me ha sacado de un buen apuro durante un cambio de servidor. La página se mostraba bien, pero me salía el dichoso error cuando entraba al wp-admin.
    Muchas gracias.

  53. Hola en mi caso era el ultimo tema el que no me permitia ingresar al dashboard, primero me conecte por FTP y cambie a “define(‘WP_DEBUG’, true);” en el archivo wp-config.php, al recargar la pagina me aparecio un mensaje como:
    Warning: Cannot modify header information – headers already sent by (output started at /home/xxx/public_html/wp-content/themes/spicy/functions/template-tags.php:41) in /home/xxx/public_html/wp-login.php on line 424

    Aca pude notar que en la carpeta themes hace referencia a “spicy”, el ultimo tema activado, por lo que me dirigi hacia esa carpeta y la renombre como “spicy_temporal”, al recargar la pagina de login pude ingresar al dashboard..! (ojo: el archivo lo baje a mi pc, los modifico con notepad++, y si el server es linux deben utilizar “Editar/Conversión de fin de linea/formato UNIX”).

  54. muchas gracias, genio! los espacios eran el problema, saludos!

  55. Gracias colega, muy util.

  56. Genial amigo, me has salvado, tenia un salto de linea

  57. por mas que busque el error jamás lo encontré, lo que hice fue copiar y pegar el código en notepad y guardarlo con codificación ANSI y listo, me he topado con espacios en blanco anteriormente y eso también es un error, así que si todo tu código está bien, intenta lo de notepad. Saludos

    1. me pasaba lo mismo, no encontraba el error y abri el wp-config.php con notepad, guarde con codigo ANSI y subir el archivo por FPT y ahroa funciona… Menos mal que ya estaba desesperado!

  58. excelente aporte, el espacio era el problema, muchas gracias

  59. Con las lineas de código se soluciona el error….

    Muchas gracias

Agregue un comentario

Su dirección de correo no se hará público. Los campos requeridos están marcados *