php - Should I call exit() after calling Location: header?
After calling the redirect function header, should I call exit or not?
<?php // fileA
$urlFailToGoTo = '/formerror.php';
if (sth)
{
header(sprintf("Location: %s", $urlFailToGoTo));
exit(); //should I call exit() here? or return?
}
?>
Thank you
Solution 1:
You definitely should. Otherwise the script execution is not terminated. Setting another header alone is not enough to redirect.
Solution 2:
You should, just like @rgroli explains. If you do not want to bother with brackets, you can also call header()
IN exit()
:
if(sth) exit(header("Location: http://example.com"));
Location header in HTTP/1.1 always requires absolute path see the note here.
Note: This is not a hack, since the exit code is used only if the parameter is integer, while header()
produces void (it exits with code=0, normal exit). Look at it as exit_header()
function like it should be after Location
header.
Solution 3:
It's generally good practice to exit;
(note - it's a keyword, so you don't need the ()
) after sending a Location:
header, since browsers are supposed to redirect to the new page and so further execution of the current script is usually undesired.
Solution 4:
If you don't have any code (PHP or HTML) under header, you don't have to.