为什么php头(“location..”)在脚本末尾执行


why php header("location...") executes at end of script?

这里有一个我测试过的简单脚本:

<?php
require 'dbcon.php';
header("location:http://google.com");
$time1 = time();
for($i=0;$i<=9999999;$i++){
    $j += $i * $i * $i * $i;
}
$time2 = time();
$total = $time2-$time1;
mysql_query("insert into test values('$total')");
?>

这个脚本大约需要15秒才能执行(所以在我的测试表中插入了15秒),在这几秒钟之后,页面也会重定向到指定的域。

我的问题是为什么会发生这种情况?

在我的真实代码中,我想将用户重定向到一个网页,然后执行剩余的代码并存储在数据库中,这样用户就不必等待太久。怎么做?

更新1:请回答以下问题:
我想首先重定向用户,然后将数据插入mysql。例如,我首先获取用户的ip。然后我想重定向他,然后从他的ip中检测用户国家,等等,然后将信息插入mysql。这在某种程度上可能吗?

更新2:
我想从另一个具有curl扩展名的网站获取用户的国家和地区,然后存储在数据库中。所以需要几秒钟。。。

header("Location: ...");只设置了一个标头,仅此而已。这就是为什么在设置位置标头后,您应该始终使用exitdie(),除非您确切地知道不这样做会让自己陷入什么境地。

至于你想做什么,这是个坏主意。故意让一个请求花费15秒就等于要求DOS攻击。

请尝试以下操作:

header("location:http://google.com");
exit;

调用标头后退出即可。