70 votes

php - Dois-je appeler exit() après avoir appelé Location : header ?

Après avoir appelé l'en-tête de la fonction de redirection, dois-je appeler exit ou non ?

<?php // fileA
$urlFailToGoTo = '/formerror.php';

if (sth)
{
   header(sprintf("Location: %s", $urlFailToGoTo));
   exit(); //should I call exit() here? or return?
}

?>

Merci.

76voto

rgroli Points 475

Vous devriez vraiment le faire. Sinon, l'exécution du script n'est pas terminée. La définition d'un autre en-tête ne suffit pas à rediriger.

30voto

Jan Turoň Points 6598

Si vous ne voulez pas vous embêter avec les supports, vous pouvez aussi appeler exit() DANS header de cette façon :

if(sth) exit(header("Location: http://example.com"));

L'en-tête d'emplacement dans HTTP/1.1 exige toujours un chemin absolu. voir la note ici .

20voto

Amber Points 159296

C'est généralement une bonne pratique de exit; (remarque - il s'agit d'un mot-clé, donc vous n'avez pas besoin de la balise () ) après avoir envoyé un Location: puisque les navigateurs sont censés rediriger vers la nouvelle page et que la poursuite de l'exécution du script actuel est généralement indésirable.

8voto

Si vous n'avez pas de code (PHP ou HTML) sous l'en-tête, vous n'êtes pas obligé de le faire.

4voto

Umingo Points 370

La sortie est un mauvais codage.

si jamais vous développez un gros projet et que vous voulez créer des tests unitaires PHP, exit vous foutra dans la merde.

exit termine le script et votre test en cours d'exécution ! il n'y a aucun moyen de récupérer le test et de dire s'il a échoué ou non....

organiser votre code de manière à ce qu'il n'y ait pas de sortie et que le script se termine naturellement si vous utilisez une redirection ...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X