Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > PHP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-01-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: Dec 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.656
Poder: 27
dec Tiene un aura espectaculardec Tiene un aura espectacular
Por qué el "die" luego de un "header"

Hola,

Lo mismo han visto Script PHP que en algún momento establecían que:

Código PHP:

if($Variable){
  
header('Location: http://www.clubdelphi.com/');
  die;

Hace poco me enteré de por qué el "die" luego del "header". Es decir, el "header", en este caso, actuará como una redirección y hará que en el navegador se comienze a cargar el ClubDelphi.com. A continuación se utiliza el "die", pero, ¿para qué, si ya el usuario está fuera de nuestra página?

Pues resulta que el usuario, efectivamente, abandona nuestra página por mor del "header" en que redireccionamos al ClubDelphi. Pero es el usuario quien abandona, no el Script PHP que seguirá ejecutándose "ya en segundo plano".

Esto puede comprobarse, por ejemplo, con el siguiente código:

Código PHP:
<?php

session_start
();

if(isset(
$_SESSION['test']))
  echo 
$_SESSION['test'];

header('Location: http://www.clubdelphi.com/');

if(!isset(
$_SESSION['test']))
  
$_SESSION['test'] = '¡Hola mundo!';
    
?>
¿Qué ocurre ahí? Primero que nada iniciamos la sesión de usuario. Comprobamos a continuación si cierta variable de sesión está establecida y, si es así, mostramos el valor de la variable.

Justo después viene el "header" que ha de redireccionar al usuario a ClubDelphi.com. Entonces, ¿el código de más abajo nunca llegaría a ejecutarse? Si ejecutamos el Script anterior veremos que sí que llega a ejecutarse el código, que se comprueba que la variable de ejemplo no está aún establecida y que de ser así establece como valor de la misma la cadeba "¡Hola mundo!".

Si ejecutamos el Script, decía, la primera vez seremos redirigidos a ClubDelphi.com. Pero la segunda vez no ocurrirá así, puesto que la variable de sesión que utilizamos a modo de ejemplo estará establecida y por tanto podremos ver su valor: ya el header no tendrá efecto, puesto que ya habremos enviado la salida al cliente/navegador.

Así que ya sabéis, ojo con los "die", puesto que a veces si no se mata un Script a tiempo este sigue ejecuándose... incluso cuando a la vista parezca que ya nos fuimos a otro lado...
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
  #2  
Antiguo 29-01-2007
[kayetano] kayetano is offline
Miembro Premium
 
Registrado: May 2003
Ubicación: Elche
Posts: 644
Poder: 16
kayetano Va por buen camino
Hola

Gracias por tu información, pero creo recordar que esto ya se ha comentado alguan vez en el foro, de todas formas nunca esta de más un recordatorio a las cosas importantes.

Como también se ha comentado hace poco, yo prefiero EXIT() a DIE().
__________________
Salu2
KAYETANO

Cómo hacer preguntas de manera inteligente
Responder Con Cita
  #3  
Antiguo 29-01-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: Dec 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.656
Poder: 27
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Gracias Kayetano. Debí suponer que el asunto era viejo... pero, en fin, me llamó la atención cuando lo descubrí y lo demás vino solo.
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
  #4  
Antiguo 29-01-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: May 2003
Ubicación: Ciudad de México
Posts: 20.206
Poder: 10
roman Tiene un aura espectacularroman Tiene un aura espectacular
De hecho, así se recomienda en el ejemplo del manual para la función header:

Código PHP:
<?
header
("Location: http://www.example.com/"); /* Redirect browser */

/* Make sure that code below does not get executed when we redirect. */
exit;
?>
// Saludos
Responder Con Cita
  #5  
Antiguo 29-01-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: Dec 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.656
Poder: 27
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Sí; es lo que pasa cuando uno pierde horas por ahí... zanganeando... sin echar un vistazo siquiera al manual.
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
  #6  
Antiguo 29-01-2007
[kayetano] kayetano is offline
Miembro Premium
 
Registrado: May 2003
Ubicación: Elche
Posts: 644
Poder: 16
kayetano Va por buen camino
Hola

De todas formas, el ejemplo que has puesto (dec) demuestra claramente los problemas que puede acarrear no poner el EXIT().
__________________
Salu2
KAYETANO

Cómo hacer preguntas de manera inteligente
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ventana MDI, "Siempre visible" y "Pantalla completa" ixMike API de Windows 7 11-04-2007 19:36:55
¿cuál es mejor: "close" o "application.terminate"? unreal4u Varios 5 05-03-2007 12:01:19
"ChequeaEsto" elegido el futuro "Killer CLubDelphi" mamcx Noticias 51 31-10-2006 21:56:32
porque no me reconoce los caracteres "*" ni "%" cuando filtro mrmago Conexión con bases de datos 10 27-01-2006 05:21:16


La franja horaria es GMT +2. Ahora son las 12:34:07.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi