是的,之前已经问过这个问题,但答案是不一致的.就拿我为什么要通过在PHP头("位置..")重定向后打电话到"退出"?例如.每个答案(包括接受的答案)都是肯定的,除了收到零票的最后一个答案,表示"可能".我开始认为正确的答案是"可能".为了使它成为一个简单的"是"或"否"问题,将在给定以下脚本的情况下执行这个()吗?谢谢
header('Location: http://somewhereElse.com');
//die();
sleep(1000);
doThis();
Run Code Online (Sandbox Code Playgroud)
编辑谢谢,所有.使用我的PHP/Linux/Apache配置,第二个syslog()执行,所以答案是"是的,将执行标题的所有脚本下游".我将假设(并希望我是正确的)它与所有PHP/Linux/Apache配置相同!
<?php
header('Location: http://google.com');
syslog(LOG_INFO,'first');
sleep(5);
syslog(LOG_INFO,'Second');
?>
Run Code Online (Sandbox Code Playgroud)
Cod*_*Ray 24
是的,header('Location: http://google.com')如果您没有明确终止它,脚本会在调用后继续处理!我刚在当地尝试过.我使用以下内容将test.php添加到apache中的站点:
<?php
header('Location: http://google.com');
error_log("WE MADE IT HERE SOMEHOW");
?>
Run Code Online (Sandbox Code Playgroud)
并检查了我的/ var/log/apache2/error_log以获取此条目:
[Tue Feb 12 23:39:23 2013] [error] [client 127.0.0.1] WE MADE IT HERE SOMEHOW
Run Code Online (Sandbox Code Playgroud)
可能令人惊讶,但是,如果你不停止执行,它会继续执行.
人们似乎真的很困惑,以及脚本执行的原因.当您发送重定向标头时,浏览器会立即将用户重定向到新页面,但您的服务器将继续处理代码,即使最后没有人接收它,这并不意味着脚本已终止.除非您将Apache配置为在实现时停止脚本,否则在另一端没有人.
当PHP脚本正常运行时,NORMAL状态处于活动状态.如果远程客户端断开连接,则打开ABORTED状态标志.远程客户端断开通常是由用户按下STOP按钮引起的.
您可以决定是否要将客户端断开连接以导致脚本中止.有时,即使没有远程浏览器接收输出,也始终让脚本运行完成是很方便的.但是,默认行为是在远程客户端断开连接时中止脚本.可以通过
ignore_user_abortphp.ini指令以及相应的php_valueignore_user_abortApache httpd.conf指令或ignore_user_abort()函数来设置此行为 .
在没有进一步操作的情况下重定向用户的正确方法是:
header("Location: blah.php");
exit();
Run Code Online (Sandbox Code Playgroud)
让我解释一下.我们有一个使用session的例子.
$_SESSION["username"] = 'some username';
header("Location: another-file.php");
$_SESSION["username"] = 'replace username';Run Code Online (Sandbox Code Playgroud)
结果$_SESSION["username"]将是replace username
您可以输出更多的标题,而不仅仅是Location带标题的标题,其中大部分都不想停止代码执行.如果要停止代码执行,则需要exit显式调用.
该header命令不会中断代码流.即使遇到这种情况,浏览器仍然会下载您的页面,即使它没有显示.考虑一下404 pages(尽管是错误)仍然由浏览器处理(尽管它们是在重定向时不呈现的).
| 归档时间: |
|
| 查看次数: |
21291 次 |
| 最近记录: |