为什么php header(“location ...”)在脚本结束时执行?

时间:2012-09-10 21:50:39

标签: php redirect header

这是我测试的一个简单脚本:

<?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秒才能执行(因此在我的 test 表中插入了15个脚本),在这些秒之后,该页面也会重定向指定的域。

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

在我的实际代码中,我想将用户重定向到网页然后执行剩余的代码并存储在数据库中,因此用户不必等待很多。怎么做?

UPDATE1: 请回答这个问题:
我想先重定向用户,然后将数据插入mysql。例如,我首先得到用户的IP。然后我想重定向他,然后从他的IP等检测用户国家,然后将信息插入mysql。有可能吗?

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

2 个答案:

答案 0 :(得分:5)

header("Location: ...");只设置标题,仅此而已。这就是为什么在设置位置标题后应始终exitdie()的原因,除非您不知道自己正在做什么。

至于你想要做什么,这是一个坏主意。故意提出15秒的请求只是要求DOS攻击。

答案 1 :(得分:-1)

试试这个:

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

在调用标题后退出。