Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   Por qué el "die" luego de un "header" (https://www.clubdelphi.com/foros/showthread.php?t=39721)

dec 28-01-2007 14:54:15

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...

kayetano 28-01-2007 23:00:11

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().

dec 29-01-2007 05:42:23

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. :)

roman 29-01-2007 06:39:46

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

dec 29-01-2007 06:40:44

Hola,

Sí; es lo que pasa cuando uno pierde horas por ahí... zanganeando... sin echar un vistazo siquiera al manual. :D :D

kayetano 29-01-2007 11:06:21

Hola

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


La franja horaria es GMT +2. Ahora son las 08:29:45.

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