Ver Mensaje Individual
  #20  
Antiguo 16-08-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Reputación: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Efectivamente, no puede enviarse nada al cliente/navegador, antes de haber enviado las correspondientes cabeceras HTTP en la respuesta. Dicho de otro modo, no pueden enviarse cabeceras HTTP una vez se enviara algo al cliente/navegador. Por nada y por algo entendamos texto o cualquier otra cosa que tenga su destino en la salida estándar en estos casos: el cliente o navegador Web.

Para redireccionar con PHP podemos valernos de cabeceras HTTP (como para no pocas cosas, en realidad el protocolo HTTP, las cabeceras disponibles, sobrepasa a PHP y convendría que le echáramos un vistazo porque nos servirá para no pocos asuntos más además) y podría hacerse más o menos así:

Código PHP:
<?php
header
("HTTP/1.1 301 Moved Permanently"); 
header("Status 301 Moved Permanently");
header('Location: http://www.clubdelphi.com/');
die;
?>
Vamos ahora a provocar el conocido error mencionado anteriormente:


Código PHP:
 <?php
echo "Salida al cliente, o sea, se enviarán ciertas cabeceras HTTP y luego esta cadena";
 
header("HTTP/1.1 301 Moved Permanently"); // Error, ya se enviaron las cabeceras HTTP y cierta salida
 
header("Status 301 Moved Permanently");
 
header('Location: http://www.clubdelphi.com/');
 die;
 
?>
Sin embargo, lo contrario sí es correcto:

Código PHP:
 <?php
 header
("HTTP/1.1 301 Moved Permanently");
 
header("Status 301 Moved Permanently");
 
header('Location: http://www.clubdelphi.com/');
echo 
"Salida al cliente, o sea, se enviarán ciertas cabeceras HTTP y luego esta cadena";
die;
 
?>
Es correcto, pero, en este caso la salida del "echo" no se produciría, porque antes nos "vamos" a otra página, redireccionamos al cliente al ClubDelphi, como puede verse.

Pero, como hemos dicho, las cabeceras HTTP no sólo sirven para redireccionar, sino que, pueden servir y lo hacen para muchas otras cosas. En el siguiente ejemplo se envía una cabecera HTTP que indica que la salida ha de tratarse (por el cliente) como un archivo XML y además con cierta codificación de caracteres, lo que se diría indicar al cliente el "Content/Type" de la salida/respuesta que le pensamos hacer llegar, y a continuación de la correspondiente cabecera se imprimiría el contenido, la salida:

Código PHP:
  header('Content-type: text/xml; charset="utf-8"');
  echo 
"
   <loturak version=\""
APP_VERSION ."\">
    <enlace>
     <id>
$enlace->id</id> 
     <titulo>
$enlace->titulo</titulo>
     <url>
$enlace->url</url>
     <fecha>
$enlace->fecha</fecha>
     <descripcion>
$enlace->descripcion</descripcion>     
     <etiquetas>
$enlace->etiquetas</etiquetas>          
    </enlace>
   </loturak>
  "
;
  die; 
Y, bueno... dicho esto... ¿dónde ves tú en el código de Emilio que has referido que haga uso de la función "header"? Yo no lo veo. No veo que añada ninguna cabecera HTTP a la salida , pero, a lo mejor es que no te entendí bien o se me escapa algo en todo caso.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 16-08-2006 a las 15:06:57.
Responder Con Cita