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

问题描述:

在调用重定向函数头之后,我应该调用exit还是不?php - 我应该在调用Location:header之后调用exit()吗?

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

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

?> 

谢谢

+1

可能的重复[为什么我必须在通过头('地点..')在PHP重定向后调用'退出'](http://*.com/questions/2747791/why-i-have-to-call- exit-after-redirection-through-headerlocation-in-php) – 2014-10-14 17:52:49

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

+0

你好奥利弗, 退出是否终止执行脚本在formerror.php? 我想我的问题是当我在'header'之后调用'exit'时。哪个脚本受到影响并且不会再执行? 谢谢 – q0987 2010-08-24 13:28:12

+1

退出总是中断当前脚本(在你的情况下“fileA”)。您重定向到的页面(“/formerror.php”)完全不受影响。 重定向告诉浏览器向您在“位置”中指定的位置发起一个新的HTTP请求。这与手动点击指向“formerror.php”的链接基本相同。 – rgroli 2010-08-24 14:06:13

+0

非常感谢:) – q0987 2010-08-24 23:50:49

它总体上是好的做法exit;(注 - 这是一个关键字,所以你不需要())发送Location:头之后,因为浏览器都应该重定向到新页面,因此当前脚本的进一步执行通常是不希望的。

如果头下没有任何代码(PHP或HTML),则不需要。

+0

你好aromawebdesign.com, 我有代码在formerror.php。那是问题吗? 谢谢 – q0987 2010-08-24 13:29:17

+0

如果你在调用header之后确实有任何类型的代码,你应该调用die();或退出(); – Hydrino 2010-08-24 17:43:09

您应该像@rgroli解释的那样。如果你不想用括号打扰,你也可以拨打header()INexit():在HTTP

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

Location头/ 1.1总是需要绝对路径see the note here

注:这不是一个黑客,因为exit code仅用于如果参数是整数,而header()产生空隙(它与代码= 0,正常退出退出)。将它看作exit_header()函数就像在Location后面应该的那样。

+1

我想你的意思是*'header' ** IN **'exit()'*? ;) – yckart 2016-07-10 19:39:35

+0

这不是说你传递'header'的输出作为'exit'的退出码吗?这不会有些不好吗? – ADTC 2016-11-24 09:45:50

+0

@ADTC'header()'在PHP中返回void和退出代码仅在参数为整数时使用。在这种情况下,它只是静默地停止代码生成(意味着退出代码= 0,正常退出)。 – 2016-11-24 10:02:44

退出是错误的编码。

如果你曾经开发过一个大项目并想创建PHP单元测试用例,那么退出会让你感到困扰。

退出终止脚本和您的运行测试!有没有办法恢复测试和判断它已失败或不...

组织代码的方式,没有输出,如果你使用重定向脚本自然结束......

+1

我认为如果测试软件无法对其正在测试的脚本进行沙盒测试,那就是失败了。这就像一台计算机关闭,因为一个shell脚本使用'exit'命令终止。 – ADTC 2016-11-27 07:53:11

+0

不,在任何事情之间终止任何事情都是错误的。有一个编程背后的原因。它都是以一个函数调用开始的,它都以一个函数调用结束。 – Umingo 2016-11-30 13:15:45

+2

我不知道你在说什么':/' – ADTC 2016-12-01 13:17:49