Programación y Diseño WebDiscusiones relacionadas con lenguajes de programación web y técnicas de diseño. Solución de errores, optimización y usos prácticos en entorno web hosting.
Error PHP: Warning: Cannot modify header information - headers already sent by
Este es el tema Error PHP: Warning: Cannot modify header information - headers already sent by que se encuentra dentro del foro Programación y Diseño Web, que es parte de la categoría Operación y logística
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
Cita:
Solución 3
session_start() debe ser ejecutado antes de cualquier salida HTML porque envía headers HTTP al navegador. Pida a un desarrollador en PHP que edite el código para solucionarlo.
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 =)
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
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
Código:
<?
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 */
?>
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.
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.
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.
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...
Código 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 index, a pesar de q llegal al primer header
por fa no se k estoy haciendo mal
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.
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?
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.
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.
S O L U C I O N.
Modificar en el php.ini el "output_buffering" como sigue:
output_buffering = 4096
Por defecto esta en on/off, cambiarlo a ese valor y listo.
Gracias por tu aporte... aunque no necesariamente es una solución. Tal como te respondieron en otro foro:
Cita:
tenemos la solución de programar bien la web, pero mejor cambiamos la configuración de php para que pase inadvertido el error... cuando nos vayamos a otro servidor, tendremos el mismo problema, pero sera luego.
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.
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.
Muy buena respuesta. Este error suele presentarse muchas veces.
si claro tenes razon esa era mi problema, a pero me entretuve viendo tu aportacion tan chidos , bueno ora dejen le sigo.eek::e:lo a pinches monitos tan chidos voy a seguir picandole
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
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.
Seguramente al error te lo esta generando la siguiente línea (217):
Código:
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:
__________________ ● LomaHost | Web Hosting y registro de dominios en Argentina.
● Hosting Linux con cPanel, PHP, MySQL, Correo y 222+ aplicaciones lista para instalar.
● Servidores cPanel 100% administrados.
La comunidad dedicada al web hosting más grande en nuestro idioma.
Para anunciar en ComunidadHosting, o para información general, por favor utiliza el formulario de contacto.
Para encontrar servicios informáticos utiliza un directorio de empresas. Con Infoisinfo.es puedes encontrar servicios de hosting e informática en tu ciudad.