php - 我应该在调用Location:header之后调用exit()吗?

q09*_*987 70 php

在调用重定向函数头之后,我应该调用exit吗?

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

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

?>
Run Code Online (Sandbox Code Playgroud)

谢谢

rgr*_*oli 76

你绝对应该.否则,脚本执行不会终止.仅设置另一个标头不足以重定向.

  • exit 总是会中断当前脚本(在您的情况下为“fileA”)。您重定向到的页面 ("/formerror.php") 根本不受影响。重定向会告诉您的浏览器向您在“位置”中指定的位置发起新的 HTTP 请求。这与手动单击“formerror.php”链接基本相同。 (2认同)

Jan*_*roň 29

你应该像@rgroli解释的那样.如果您不想打扰括号,也可以调用header() IN exit():

if(sth) exit(header("Location: http://example.com"));
Run Code Online (Sandbox Code Playgroud)

HTTP/1.1中的位置标头始终需要绝对路径,请参阅此处的注释.

注意:这不是一个hack,因为退出代码仅在参数为整数时使用,而header()生成void(它以代码= 0退出,正常退出).看它exit_header()就像它应该在Location标题后的功能.

  • 我想你的意思是 *`header` **IN** `exit()`*?;) (2认同)

Amb*_*ber 20

通常很好的做法是exit;(注意 - 它是一个关键字,因此你不需要())Location:,因为浏览器应该重定向到新页面,因此通常不需要进一步执行当前脚本.


小智 8

如果您在标题下没有任何代码(PHP或HTML),则不必.


Ben*_*ein 5

exit 是错误的编码。

如果您曾经开发过一个大项目并想要创建 PHP 单元测试用例,退出将会把您搞砸。

exit 终止脚本和您正在运行的测试!没有办法恢复测试并判断它是否失败......

以这样的方式组织代码,如果使用重定向,则没有输出并且脚本自然结束...

  • 我认为,如果测试软件无法对其正在测试的脚本进行沙箱处理,那么它就是失败的。这就像一台计算机因为 shell 脚本使用“exit”命令终止而关闭。 (7认同)
  • 我不知道你在说什么`:/` (5认同)