调用重定向函数header后,我是否应该调用exit函数?
<?php // fileA
$urlFailToGoTo = '/formerror.php';
if (sth)
{
header(sprintf("Location: %s", $urlFailToGoTo));
exit(); //should I call exit() here? or return?
}
?>
谢谢你
调用重定向函数header后,我是否应该调用exit函数?
<?php // fileA
$urlFailToGoTo = '/formerror.php';
if (sth)
{
header(sprintf("Location: %s", $urlFailToGoTo));
exit(); //should I call exit() here? or return?
}
?>
谢谢你
像@rgroli解释的那样,您应该这样做。如果您不想麻烦使用括号,您还可以在exit()
中内部调用header()
:
你应该像 @rgroli 解释的一样做。如果你不想费事加括号,你也可以在 exit()
中用 header()
来代替:
if(sth) exit(header("Location: http://example.com"));
HTTP/1.1中的Location头总是需要绝对路径。在这里看到注释。
注意:这并不是一个黑客技巧,因为只有当参数为整数时才会使用exit code,而header()
函数则产生void(以code=0退出,正常退出)。
将其视为像exit_header()
函数一样,在Location
头之后应该是这样的。
exit()
中的 header
吧? ;) - yckartheader
的输出作为exit
的退出代码传递吗?那不是有些不可取吗? - ADTCheader()
返回 void,并且仅在参数为整数时使用退出代码。在这种情况下,它只会静默地停止代码生成(意味着退出代码=0,正常退出)。 - Jan Turoň通常情况下,发送 Location:
头后,最好使用 exit;
(注意 - 它是一个关键字,因此不需要 ()
), 因为浏览器应该重定向到新页面,所以通常不需要继续执行当前脚本。
如果您的头部没有任何代码(PHP或HTML),则不需要添加。
使用exit是不良编码习惯。
如果你正在开发一个大型项目并想要创建PHP单元测试用例,exit将会给你带来麻烦。
exit终止脚本和测试的运行!没有办法恢复测试并告诉你它是否失败了...
请组织你的代码方式,确保没有输出,并且在使用重定向时自然结束脚本...
exit
命令终止而导致计算机关闭。 - ADTC:/
。 - ADTCexit
调用(或者在函数/方法内部也可以使用break
)不就是为了这个目的吗?几乎所有知名编程语言都是如此,不仅仅是PHP。 - David Tabernero M.一个相关但不完全相同的情况是在实现 REST API 时。在这种情况下,请求体应包含 XML 或 JSON(或其他一些奇特的格式),因此在将有效负载建立为数组或对象并提供所有适当的标头后,将完成处理:
header( 'Content-Type: application/json' );
exit(json_encode($payload));
或者
header( 'Content-Type: application/xml' );
exit(xmlrpc_encode($payload));
两者都会将有效负载作为正文内容返回,并立即停止处理,释放服务器资源。