Ver Mensaje Individual
  #2 (permalink)  
Antiguo 10/04/2003, 10:08
Cluster
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Te lo expliqué ya en:

http://www.forosdelweb.com/showthrea...hreadid=124772
(última réplica de ese mensaje 2º parrafo) ..

Te lo repito aquí:
cuando se usa header() NOOOO se puede enviar nada de HTML antes al navegador .. Este concepto paso por que sépas como FUNCIONA PHP ..

PHP se ejecuta en el servidor PRIMERO .. osease, PHP coge tu código (el que pusistes como ejemplo) .. Interpreta el código PHP (lo q esté dentro de <? y ?> ..) Si hay HTML q mostrar (o javascrtip o lo q sea del lado del cliente) desde PHP (via echo "algo" ... o print() o cualquier función para tal fin) .. se "compone" el código HTML que corresponda .. Con todo eso ya "armado" se le entrega al "Cliente" (q es tu navegador) en estos casos para que ejecute su parte (el HTML/javascript/flash y todo lo q sea del "cliente")...

Si comprendes esto .. NO tiene sentido para PHP:

Código PHP:
<html>
<head>
<title><? echo $dir2?></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?
$url 
explode("/",$PHP_SELF); 
$filename2 $url[sizeof($url)-1]; 
$dir2 $url[sizeof($url)-2];

// echo "El dir2 es: ".$dir2."<BR>";
/**echo "<script>document.location.href='../my.php?w=".$dir2."'</script>"; 
**/
header("Location:'../my.php?w=".$dir2."'"); 
exit;


?>
</body>
</html>
Si ese script .. ese código .. va ha hacer ciertas operaciones en el SERVIDOR (en PHP) y segun sea va a "redireccionar" a otra página .. Para PHP .. LE DA IGUAL todo ese HTML q tiens ahí .. En el 99% de caso NI te das cuenta de eso .. Pero si usas funciones como session_start() .. set_cookie() o header() (entre otras) .. Veras ese mensaje de error de PHP que dice "Heyyyy, porqué me estas enviando HTML si yo voy a ejecutar solo PHP?" (jeje mas o menos eso es lo q significa) xD

Por lo tanto .. en ese ejemplo SOBRA todo HTML..

Código PHP:
<?
$url 
explode("/",$PHP_SELF); 
$filename2 $url[sizeof($url)-1]; 
$dir2 $url[sizeof($url)-2];

// echo "El dir2 es: ".$dir2."<BR>";
/**echo "<script>document.location.href='../my.php?w=".$dir2."'</script>"; 
**/
header("Location: ../my.php?w=$dir2'"); 
exit;
?>
Y cuidado con el "Location: .. " Al estar entre "comillas" (dobles) puedes meter tus variables sin problemas .. pues "PHP" lo va a "parsear" (va a interpretar que $dir2 ahí le tiene q dar su valor) .. Tambien es importante el espacio entre location: y el URI q pones ..

Ahora, imagina que vas hacer un "redireccionamiento" si alguna condicion no se cumple (típico si has validado unos datos y no son correcto direccionar a un formulario) si son correctos .. muestro el HTML que hay a continucación ..

Esto NO sería correcto
Código PHP:
<html>
<head>
</head>
<body>
<?
if (nosecumplealgo){
  
header("location: algunstio.php");
  exit;
}
?>
Si no se cumple lo otro .. sigo con HTML ...
</body>
</html>
No es correcto por lo dicho anteriormente .. antes de header() no puede existir nada de HTML .. ademas por ende debería quedar:

Código PHP:
<?
if (nosecumplealgo){
  
header("location: algunstio.php");
  exit;
}
?>

<html>
<head>
</head>
<body>
Si no se cumple lo otro .. sigo con HTML ... o mas PHP
<?
echo "esto está generado por PHP";
?>
</body>
</html>
Como veras .. el concepto es sencillo .. pero hay q saberlo si vas a trabajar con CUALQUIER lenguaje del lado del servidor .. Ya no solo PHP sino que esta "teoría" es válida para Perl, ASP, etc ...

En resumen ..
Piensa siempre que PHP hace un "cut-and-paste" de tu código HTML/javascritp/etc que estas componiendo a base de la lógica de tus programación PHP (condicionales, bucles .. etc).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.