problema con header

jantonio772
25 de Diciembre del 2005
Tengo el siguiente problema. algo tan simple como:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title> Login </title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?php header("location:main.php");?>
</body>
</html>

me devuelve el error:

Cannot modify header information - headers already sent by (output started at ......

Alguien puede ayudarme a resolver el enigma.

Gracias de antemano.

Califa
25 de Diciembre del 2005
Hola, el problema es que la línea
header("location:main.php");
tiene que ir al principio.

Lo que hace la función header es mandar los headers/cabezales html al navegador. Si hubo antes algún fragmento de código html enviado al navegador, produce ese error.

Para solucionar el problema, tenés (que yo sepa) dos opciones:

a)
<?php
header("location:main.php");
?>

b) usar javascript.

Si lo que querés es que la página simplemente redireccione a otra, pero en sí no tiene contenido html para mostrar en pantalla, con el ejemplo a) alcanza (ni hace falta !doctype y todo lo demás).

Si, en cambio, querés redireccionar después de haber mandado código html al navegador, vas a tener que usar JS. No es muy complicado. Dentro del código HTML, va esto:

<script type="text/javascript">
location='main.php';
</script>

y ya está.

Volviendo a header(), no es indispensable que sea la primera línea, pero antes no tiene que haber ningún "output" — nada de html enviado al navegador. O sea, que tampoco se puede hacer ningún "echo".

<?php
echo "hola<br />";
header("location:main.php");
?>

por ejemplo, también daría error.

Suerte.


jantonio772
25 de Diciembre del 2005
Te agradezco la ayuda. Pero si dentro de una funcion php, yo quiero redireccionar a una pagina en funcion de una condicion, como lo harias ?

Califa
25 de Diciembre del 2005
Podrías llegar a usar header(), pero habría que ver puntualmente el script. Lo más fácil y práctico es usar JavaScript. El único inconveniente sería que algunos navegadores MUY viejos podrían tener inconvenientes o algún usuario podría tener JS desactivado. Pero para el, digamos 95% de los usuarios, no habrá problemas porque ya casi nadie tiene IE 3 o anterior, algún netscape viejo, etc. Además, JS está activado por defecto (y la mayoría de la gente ni siquiera lo sabe, así que dificilmente lo hayan desactivado). En síntesis, la solución más rápida y práctica sería hacer algo así:

test();

function test() {
if (1==1) { // acá va tu condición; ésta que usé siempre se va cumplir!!
echo "<script type='text/javascript'>";
echo "location='main.php'"; // redireccionar acá.
echo "</script>";
}
}
?>