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


Posted

in

by

Tags:

Comments

67 respuestas a “Corregir error de “Warning: Cannot modify header information””

  1. Ariel Avatar

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

  2. Alejandro Avatar
    Alejandro

    Muchas Gracias, genio!!!!

  3. RAUL Avatar

    Eres un genio

  4. Erickson Vásquez Avatar

    Muy buen post, me funcionó perfectamente, gracias.

  5. Maco Avatar
    Maco

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

  6. alberto Avatar

    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.

  7. Javier Avatar

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

  8. Julian Avatar
    Julian

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

  9. Bryan Avatar

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

  10. Eduardo Avatar
    Eduardo

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

  11. fahren Avatar

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

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

    2. Jose Avatar
      Jose

      Genial esa es la solucion

    3. Felix Avatar
      Felix

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

  12. niko ajucum Avatar

    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.

  13. jesus alberto Avatar

    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′”);

  14. jesus alberto Avatar

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

  15. EDISON RAUL Avatar
    EDISON RAUL

    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.

  16. daguilera Avatar
    daguilera

    Gracias!!! Era exactamente lo que me pasaba!

  17. Gabriel Rodriguez Avatar
    Gabriel Rodriguez

    Gracias bro me sirvió muchisimo

  18. Angel Avatar

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

  19. Miguel Amaro Avatar
    Miguel Amaro

    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

  20. maxi Avatar

    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

  21. Davis Soriano Flores Avatar

    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

  22. Jefferson Lipsky Avatar

    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!

  23. hilaida Avatar
    hilaida

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

  24. Jhon Avatar

    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.

  25. victor Avatar
    victor

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

  26. Jhasm Avatar
    Jhasm

    Excelente me fue muy útil

  27. Rocio Velázquez Avatar

    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 🙂

  28. Jois Jiménez Avatar
    Jois Jiménez

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

  29. cristian Avatar

    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.

  30. Jon Ander Avatar
    Jon Ander

    Gracias y mil gracias. Me estaba volviendo loco.

  31. Andrés Avatar
    Andrés

    Muchhas gracias!

  32. willerenver Avatar

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

  33. David Avatar
    David

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

  34. Ysrael Avatar
    Ysrael

    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

  35. Ysrael Avatar
    Ysrael

    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.

  36. Alfonso Urrego Avatar
    Alfonso Urrego

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

    muchas gracias 😀

  37. David Avatar

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

  38. wilden Avatar
    wilden

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

  39. gustavo Avatar
    gustavo

    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?

  40. Anonimo Avatar

    Muchas gracias me sirvio

  41. leon Avatar
    leon

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

  42. Cgalv3z Avatar

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

  43. bruno Avatar
    bruno

    sos un genio!!!!

  44. Jorge Davalos Avatar
    Jorge Davalos

    I love you!! haha gracias!

  45. Cuichi Avatar
    Cuichi

    mi error era que tenia un espacio antes de <?

  46. Wilson Campos Campos Avatar
    Wilson Campos Campos

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

  47. Andres Benavides Avatar
    Andres Benavides

    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

  48. SysWhite INC Avatar

    Se te agradece…
    Muchisimas gracias!!!!

  49. Tu nuevo esclavo Avatar
    Tu nuevo esclavo

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

  50. Gustavo Avatar
    Gustavo

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

      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

  51. ibach Avatar

    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.

  52. Marcos Casco Avatar
    Marcos Casco

    Excelente, muchas gracias.

  53. M. A. G. Avatar

    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.

  54. Victor Avatar
    Victor

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

  55. Fernando Avatar
    Fernando

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

  56. Avril Avatar
    Avril

    Gracias colega, muy util.

  57. Jose Avatar
    Jose

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

  58. danny Avatar

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

      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!

  59. marlon Avatar
    marlon

    excelente aporte, el espacio era el problema, muchas gracias

  60. Eva Avatar
    Eva

    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 *