我应该在调用Location:标头后调用exit()吗?


Answers:


81

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


您好奥利弗,出口是否终止formerror.php中脚本的执行?我想我的问题是,何时在“标题”之后调用“退出”。哪个脚本受到影响并且将不再执行?谢谢
10年

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

因此,退出基本上只针对服务器,因此它不会执行其他不必要的工作吗?
古斯塔·范·德·沃尔

32

您应该就像@rgroli解释的那样。如果您不想打扰括号,也可以致电header() IN exit()

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

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

注意:这不是技巧,因为仅当参数为整数时才使用退出代码,而header()退出代码会产生void(退出代码为0,正常退出)。将其视为exit_header()函数,就像应该放在Location标头之后一样。


1
我觉得你的意思header IN exit()?;)
yckart '16

这是否意味着您要将的输出header作为的退出代码传递exit?那是不是有些不可取?
ADTC

header()PHP中的@ADTC返回void,仅当参数为整数时才使用退出代码。在这种情况下,它只是默默地停止代码生成(暗示退出代码= 0,正常退出)。
JanTuroň2016年

20

在发送标头后exit;(注意-这是一个关键字,因此您不需要())通常是一种好习惯Location:,因为浏览器应该重定向到新页面,因此通常不希望进一步执行当前脚本。


8

如果标题下没有任何代码(PHP或HTML),则不必这样做。


您好,aromawebdesign.com,我在formerror.php中有代码。那是问题吗?谢谢
2010年

如果调用标头后确实有任何代码,则应调用die();。或exit();
Hydrino

4

退出是错误的编码。

如果您曾经开发过一个大型项目并想要创建PHP单元测试用例,则退出将使您感到困惑。

退出将终止脚本并运行测试!无法恢复测试并判断测试是否失败...

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


4
我认为,如果无法对正在测试的脚本进行沙箱测试,那将是测试软件的失败。这就像计算机正在关闭,因为shell脚本使用该exit命令终止了。
ADTC

不,在任何事物之间终止任何事物只是错误的。编程背后有一个栈。一切都以函数调用开始,而一切都以函数调用结束。
本杰明·埃克斯坦

5
我不知道你在说什么:/
ADTC

1
@Umingoexit调用的目的不是break吗(还是在函数/方法内部)?不仅是PHP,而且几乎是所有著名的编程语言?
David Tabernero M.

@Davdriver号 退出只会阻止自动测试您的代码并且样式不好。它只是使用出口错误设计代码的一个缩影。
本杰明·埃克斯坦
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.