1. ¡OFERTA! con cupón "DIRVPS": hosting por $0,01 y también VPS Linux y Windows por $0,01 el primer mes por Interserver ← publi
    Descartar aviso
Descartar aviso
Al usar este sitio web, aceptas que nosotros y nuestros socios podamos establecer cookies para fines tales como personalizar el contenido y la publicidad. Más información.

Error PHP: Warning: Cannot modify header information - headers already sent by

Tema en 'Programación y Diseño Web' iniciado por Apolo, 22 Ago 2006.

  1. Por eso comente...

    Saludos,
     
  2. novato_vzla

    novato_vzla Nuevo usuario

    Gracias

    Buen dia, muchas gracias por su aporte y compartir sus experiencias y conocimientos =)

    En mi caso, mi codigo funcionaba bien en el servidor wampserver que tengo instalado localmente en mi equipo, pero cuando subia la aplicación al host de internet me arrojaba el error aqui discutido.

    La solucion fué el punto3
    Con lo que movi el codigo php al principio de la pagina (antes del html) y listo!

    De nuevo muchas gracias y salu2 a todos desde el norte de la america del sur =)
     
  3. viccowface

    viccowface Nuevo usuario

    consulta!!!!

    Apolo, que tal?

    mira... tengo mi index.html dividido en frames, donde el frame superior tengo el menú en flash este a su vez tiene un link a usuarios, en el frame inferior pues info normal... ahora, cuando le doy al link de usuarios, este llama en el mainFrame a login.php, el cual se despliega perfectamente, ingreso mi usuario y pass y hago clic en ingresar, este hace la validación en BD y tendría que decirme bienvenido Victor.. bla bla... pero me devuelve lo siguiente :crap:

    Warning: Cannot modify header information - headers already sent by (output started at /home/landcrn/public_html/admin/comprueba.php:5) in /home/landcrn/public_html/admin/comprueba.php on line 57 y en esta línea lo que tiene es header("location:user.php");

    me puedes ayudar pls?

    el código completo de comprueba.php es
    CODE, HTML o PHP Insertado:
    <?
    session_start();
    ?>
    
    <style type="text/css">
    <!--
    body,td,th {
    	font-family: Geneva, Arial, Helvetica, sans-serif;
    	font-size: 12px;
    	color: #FFFFFF;
    }
    body {
    	background-color: #2E2E2E;
    }
    a {
    	font-size: 12px;
    	color: #FFFFFF;
    }
    a:link {
    	text-decoration: none;
    }
    a:visited {
    	text-decoration: none;
    	color: #FFFFFF;
    }
    a:hover {
    	text-decoration: underline;
    	color: #FFFFFF;
    }
    a:active {
    	text-decoration: none;
    	color: #FFFFFF;
    }
    -->
    </style>
    <?
    $server="localhost"; /* Nuestro server mysql */
    $database="BD"; /* Nuestra base de datos */
    $dbpass="******"; /*Nuestro password mysql */
    $dbuser="admin"; /* Nuestro user mysql */
    
    $query="SELECT * FROM usuarios WHERE login='$login'";
    $link=mysql_connect($server,$dbuser,$dbpass);
    $result=mysql_db_query($database,$query,$link);
    if(mysql_num_rows($result)==0){
    	echo "No existe el usuario introducido";
    } else {
    	$array=mysql_fetch_array($result);
    	if($array["password"]==crypt($pass,"semilla") ){
    	/* Comprobamos que el password encriptado en la BD coincide con el password que nos han dado al encriptarlo. Recuerda usar la misma semilla para encriptar los dos passwords. */
    		$SESSION["login"]=$login;
    		$SESSION["nombre"]=$array["nombre"];
    		$SESSION["apellidos"]=$array["apellidos"];
    		session_register("SESSION");
    		header("location:user.php");
    
    	} else {
    		echo "Clave incorrecto!";
    	} /* Cerramos este ultimo else */
    } /* Cerramos el else que corresponde a la comprobación de que el login existe */
    ?>
    
    Victor
     
  4. solinem

    solinem Nuevo usuario

    Que tal:
    Estoy teniendo este error, a pesar de no estar enviando nada antes de la función HEADER()
    La misma aplicación la tengo funcionando con éxito en mi servidor web, sin embargo, falla en mi pc local.
    Estoy usando XAMPP v1.7 en ambos equipos
    Server: Windows2008 enterprise server
    Local: Windows XP SP2

    Ya intenté compiar el archivo PHP.INI del servidor a mi pc local, pero no cambia nada.
    Podría esto ser un problema de CONFIGURACIÓN en mi ambiente de desarrollo, o que sucede?
    Agradezco de antemano su apoyo.
     
  5. Apolo

    Apolo Administrador Miembro del Staff Administrador CH

    Hola solinem,

    No mencionas nada acerca de si has probado ya las indicaciones que encuentras al comienzo de este mismo tema, así como de los otros dos temas similares.

    Saludos,
     
  6. d-ART

    d-ART Usuario activo

    Hola,

    Y ¿no es mejor usar cookies con un expire 0, para que se acaben cuando el usuario cierre el navegador, por ejemplo? Es lo mismo que las sesiones pero sin dar el coñazo que dan éstas, a mi manera de ver.
     
  7. anroswell

    anroswell Nuevo usuario

    No me funciona el header

    Hermano muchas gracias, por tu tema, me sirvio mucho por un lado, ya no me salen los mensajes , pero no se pork ahora no me redirecciona, siempre se va para el ultimo ciclo de te dejo el codigo haber si me puedes ayudar...

    PHP:
    <?php
    session_start
    ();
    include(
    "conexion.php");

    //if( !isset($_POST["usuario"]) || isset($_SESSION['password'])){
    //    //header(@'Location:  /Abogados/index.php');
    //    echo "Estoy en el isset de la validacion";
    //    echo $_POST["usuario"];
    //    echo "<br>";
    //}
    //Realizamos la conexion
    $sql = new Conexion();
    $sql->Conectar();

    //Capturamos los datos q nos envia el formulario
    $nombre htmlspecialchars(trim($_POST["usuario"]));
    $password htmlspecialchars(trim($_POST["password"]));



    //Enviamos datos a metodo Verificar login de la clase Conexion
    $datodevuelto $sql->ValidaLogin($nombre$password);

    //Los datos devueltos son
    //$datodevuelto = 1
    //$_SESSION["permiso"] = 1 
    //$_SESSION["nivel"] = 1

    pero siempre se va al indexa pesar de q llegal al primer header
    por fa no se k estoy haciendo mal

    //Validamos si duvuelve 1 o 0 y la variable de sesion
    if($datodevuelto == && $_SESSION["permiso"] == && $_SESSION["nivel"] == 1){        
        
    header('Location: /Abogados/admin/Menu.php');    
    }  
    else if(
    $datodevuelto == && $_SESSION["permiso"] == && $_SESSION["nivel"] == ){              
        
    header(@'Location: /Abogados/informeFinalUsuario.php');    
    }
    else if(
    $datodevuelto == && $_SESSION["permiso"] == && $_SESSION["nivel"] == ){    
            
    header(@'Location: /Abogados/Restringido.php');
        }      
        else{
            
    $_SESSION['login'] = 0;
            
    header(@'Location:'.$_SERVER["HTTP_REFERER"]);
        }
    ?>
     
    Última edición por un moderador: 4 Ago 2009
  8. Apolo

    Apolo Administrador Miembro del Staff Administrador CH

    Hola,

    Activa el desplegado de errores de PHP y así podrás ver qué ocurre.

    Saludos,
     
  9. JoseDz

    JoseDz Nuevo usuario

    Saludos

    He leido desde el post1 hasta esta 3ra pagina del seguimiento del tema, iniciado desde agosto del 2006 y con continuacion hasta estas fechas.

    Sobre el problema de los header de direccionamiento, hay algo que no entiendo... se indica que no debe enviarse nada antes del header, como con session_start(). Pero en el caso de los header(location...) como puede validarse unos datos y luego de eso direccionar con el header?

    Es decir, yo de una pagina enviaria datos a otra, donde con IF isset verifico si el campo existe, los campos con IF $_POST['dato']==null verifico que tenga datos, y ya con estas validaciones por ejemplo, meto los datos en unas variables (bien sea de sesion) y es que luego de este proceso redireccionaria a otra pagina.

    Si se indica que header se utilice antes de trabajar con datos como comento, como podria usarse el direccionamiento por header si precisamente para tomar decision de direccionamiento primero hay que trabajar con datos enviados, validarlos, guardarlos y luego direccionarse a otra pagina para seguir trabajando en con esos datos que van pasando de una pagina a otra. No podria poner de primero lo del header(location...) si antes no he coroborado y guardado los datos previamente.

    Por los momentos he solventado el direccionamiento de esta forma:
    echo ("<script type='text/javascript'>
    function retorno()
    { location.href='registro.php' }
    setTimeout ('retorno()',2000);
    </script>");

    session_start() tambien me llego a presentar estos problemas, resulto ser que no permite ni siquiera un comentario antes de session_start(), pero comentario html, si deja antes de el, comentario php.

    La solucion con lo de los header de direccionamiento como seria entonces? a parte otro archivo con tan solo las pocas lineas, algun IF que evalue un True o False y como accion del IF a ejecutar el header(location...)? porque dentro del mismo archivo php que debe primero validar los $_POST['campo'] y meterlos luego en $variable para luego uar el header, ocasiona este fallo. Es decir, existen cosas que necesitamos de php pero que no sirven estando siempre de primero, sino luego de algun proceso entre lineas del codigo.

    Muchas gracias a quien pueda proporcionarme informacion, saludos.
     
  10. Apolo

    Apolo Administrador Miembro del Staff Administrador CH

    El aspecto clave aquí es "enviarse", es decir, la impresión o salida en pantalla.

    Revisa la forma en la que combinas HTML y PHP. A veces parece tan sencillo que se cometen errores muy básicos.

    O prueba usar ob_start() en combinación con auto_prepend_file y con auto_apend_file.

    Quizás algún programador te pueda dar más ideas del asunto.

    Saludos,
     
  11. hirdolfo

    hirdolfo Nuevo usuario

    SOLUCION: error Warning: Cannot modify header information - headers already sent by.

    Mucho se ha recontra investigado, comentado, rebuscado, indagado y subestimado este error aunque aparentemente fácil de solucionar, a mi me saco canas....
    En mi aplicación hago validaciones y dependiendo de los resultados direcciono a la pagina respectiva. Localmente me funcionaba perfecto pero cuando lo montaba en el servidor, me salia ese BENDITO ERROR....... Sin mas habladera,
    S O L U C I O N.
    Modificar en el php.ini el "output_bufering" como sigue:
    output_buffering = 4096
    Por defecto esta en on/off, cambiarlo a ese valor y listo.
     
  12. Apolo

    Apolo Administrador Miembro del Staff Administrador CH

    Gracias por tu aporte... aunque no necesariamente es una solución. Tal como te respondieron en otro foro:

    El tema de output_buffering lo entiendo como algo que se debe activar o desactivar de acuerdo con las características específicas de la aplicación y/o el servidor en donde se encuentre hospedada la aplicación, no como una solución absoluta para el mensaje de error planteado en este tema.

    Saludos,
     
  13. hirdolfo

    hirdolfo Nuevo usuario

    SOLUCION: error Warning: Cannot modify header information - headers already sent by.

    Que tal amigo Apolo. La verdad no pretendo ser un erudito en PHP ni mucho menos. Es más, siempre cuando me he sentido trancado en cualquier detalle, acudo a los foros, en especial este y mi problema ha tenido respuesta.
    No obstante ESTE BENDITO ERROR me tenia loco. EN NINGUN FORO conseguia la solución en mi caso. No es lógico que una aplicación te corra bien localmente y al montarla en el servidor, de este error, verdad?
    Pensé, como última opción, revisar todo el "php.ini" a ver que podia encontrar como luz al final del camino. pero como tu muy bien sabes ese archivo es extenso y bien delicado para estar inventando activando o desactivando opciones a la loca. Por eso en "buscar" escribí "header" a ver que encontraba y me encontre con esto:

    ; Output buffering is a mechanism for controlling how much output data
    ; (excluding headers and cookies) PHP should keep internally before pushing that
    ; data to the client. If your application's output exceeds this setting, PHP
    ; will send that data in chunks of roughly the size you specify.
    ; Turning on this setting and managing its maximum buffer size can yield some
    ; interesting side-effects depending on your application and web server.
    ; You may be able to send headers and cookies after you've already sent output
    ; through print or echo. You also may see performance benefits if your server is
    ; emitting less packets due to buffered output versus PHP streaming the output
    ; as it gets it. On production servers, 4096 bytes is a good setting for performance
    ; reasons.
    ; Note: Output buffering can also be controlled via Output Buffering Control
    ; functions.
    ; Possible Values:
    ; On = Enabled and buffer is unlimited. (Use with caution)
    ; Off = Disabled
    ; Integer = Enables the buffer and sets its maximum size in bytes.
    ; Note: This directive is hardcoded to Off for the CLI SAPI
    ; Default Value: Off
    ; Development Value: 4096
    ; Production Value: 4096
    output_buffering = on **** Valor antes de cambiarlo****

    Como ves, no llegue a ese valor a la loca. solo le aplique lógica al problema.
    De todos modos me siento alagado que tan solo con haber escrito solo un mensaje en este foro me hayan replicado.
    Con respeto. Hirdolfo.
     
  14. tony79

    tony79 Nuevo usuario

    Simple!

    :lol: Un simple espacio en blanco puede arruinarme todo un día (y un código) jajaja! Gracias, he detectado el problema!
     
  15. sintlucho

    sintlucho Nuevo usuario

    si claro tenes razon esa era mi problema, a pero me entretuve viendo tu aportacion tan chidos , bueno ora dejen le sigo.:):):):)eek::e:p:p:p:lol::lol::lo a pinches monitos tan chidos voy a seguir picandole:eek::eek::eek::eek::eek::eek::afirmar::afirmar::afirmar:
     
  16. mgcastelberg

    mgcastelberg Nuevo usuario

    gosfacito, muchas gracias tenias razon elimine los echo"" y listo todo trabajo al 100%
    quien lo hubiera dicho que esa era la falla te debo una amigo.
     
  17. recruz

    recruz Nuevo usuario

    Efectivamente las soluciones planteadas son muy buenas, tuve la experiencia de migrar un sistema de php4 a php5 y en esta ultima version el compilador me descubrio los errores, tuve la tarea titanica de eliminar todos los espacios en blancos innecesarios, renombre los archivos y listo, los errores desaparecieron al instante. renombre los archivos, imagino que en los temporales del server se mantienen dichos errores al renombrarlos estos desaparecen, obiamente al final tuve que colocar sus nombres originales para no modificar ninuga linea de programacion, y listo
     
  18. Jesus37

    Jesus37 Nuevo usuario

    Gracias por la solución me estaba rompiendo la cabeza, gracias Apolo.
     
  19. OFFICERTOM

    OFFICERTOM Nuevo usuario

    CAN NOT MODIFY HEADER: Me esta volviendo loco!!!

    Hola a todos y en especial a Apolo.

    Soy nuevo en todo esto, vamos que hasta ahora sólo hacía sitios en iWeb. Ahora quiero abrir un nuevo sitio donde necesito que los usuarios se registren y rellenen un cuestionario. Para ello, y como estoy en Mac, he visto varios programas y he escogido Freeway Pro 5.4.3 que para los que entendemos poco de código esta bien.

    El problema lo tengo con la página de registro de usuarios y con PHP. He pegado un script que he encontrado pero no logro quitar el mensaje CAN NOT MODIFY HEADER... y me está volviendo loco, vamos ya como para abandonar el proyecto.

    Os incluyo el archivo de la página con el código para ver si alguien me puede echar una mano. Pido disculpas si esto no se puede hacer aquí, que todavía no lo se.

    Gracias!!!!!!!!!!!!
     

    Adjuntos:

  20. turcu

    turcu Administrador Miembro del Staff Administrador CH

    Seguramente al error te lo esta generando la siguiente línea (217):

    CODE, HTML o PHP Insertado:
    header("Location: thankyou.php");
    
    Como indica en el post, el problema ocurre al enviar cabeceras una vez que ya se imprimió código en pantalla (parte de la pagina). Si no encontrás como realizar esto de otra manera, podes intentar reemplazando la línea que indico con lo siguiente:

    CODE, HTML o PHP Insertado:
    echo '<meta HTTP-EQUIV="REFRESH" content="0; url=thankyou.php">';
    
    El resultado de ambas líneas es el mismo.

    Saludos!
     


Alojamiento web, Hosting Reseller, Servidores Dedicados - All in Hosting


    
    
    
    
Blog · Sitios amigos: GuiaHosting · Unidominios · Interalta ·