我正在创建一个脚本来验证表单,我在问自己一个问题。当我使用头部(见下面的例子)时,我需要在后面立即使用exit吗?我的意思是,使用header是否也意味着它在默认情况下是退出的,因此我不需要使用命令exit?
// cancel button clicked
if (isset($_POST['cancel'])) {
header("Location: http://localhost/admin/tracks.php");
exit;
}
echo '<p>$name</p>'发布于 2011-04-03 14:00:22
你应该调用exit(),因为header()不会自动停止脚本的执行-或者如果它自动停止脚本执行(老实说,我不是百分之百),它肯定不会立即停止脚本。
例如,尝试以下代码:
<?php
header("Location: http://www.google.com");
unlink(__FILE__);
?>这个小脚本使用header()将您重定向到谷歌,然后自行删除。如果你运行它,你会注意到在你被重定向之后,这个文件仍然被删除了。这意味着即使header()调用将您重定向,unlink()调用仍然会被执行。
发布于 2011-04-03 13:53:19
我在header->location调用之后使用exit,因为我希望能够完全依赖于脚本无法通过header->location调用这一事实。
如果某个地方有bug,并且您的脚本在header->location调用之前开始生成输出,则调用将失败,脚本将正常执行(除非您调用exit)
发布于 2011-04-03 14:14:58
尽管上面的答案听起来很棒,但如果你不确定你的代码路径,这可能会导致意想不到的结果。例如,如果您使用的框架依赖于代码执行将从头到尾运行的事实,您可能会无意中中断它。
从用户的角度来看,这可能是可以的,因为它们仍然会被重定向,并且不会更明智,但请考虑以下几点:
您正在使用一个框架(OS或自定义),该框架希望记录重定向,或设置其他标头(或任意数量的其他项)。通过调用exit,您绕过了这一逻辑,因此可能会得到意想不到的结果。
所以简而言之,是的,上面的方法是有效的,只是在短路之前要知道你期望发生的事情。
https://stackoverflow.com/questions/5527835
复制相似问题