這裏是一個簡單的腳本,我測試過:爲什麼php頭文件(「location ...」)在腳本結尾執行?
<?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是插在我測試表),並且這些秒鐘後,頁面重定向太指定域。
我的問題是爲什麼會發生這種情況?
在我的真實代碼中,我想將用戶重定向到網頁,然後執行剩餘的代碼並存儲在數據庫中,因此用戶不必等待很長時間。它將如何完成?
UPDATE1: 請回答這個問題:
我想先重定向用戶,然後將數據插入到MySQL。例如我第一次獲得用戶的IP。那麼我想重定向他,然後從他的IP等檢測用戶國家,然後插入信息到MySQL。有可能嗎?
UPDATE2:
我想獲得用戶的國家和地區從其他網站與捲曲延伸,然後在數據庫中存儲。所以它需要幾秒鐘......
如果您將用戶重定向到您的頁面之外,那麼您已經終止了該腳本,因此無法完成剩餘代碼的執行。 – Palladium
當您更改了標頭()位置時,會阻止腳本的其餘部分執行。 – ariestav
發佈這樣的標題使其成爲競賽條件。接收的瀏覽器將得到該重定向並關閉當前的條件,這將殺死你的腳本。一旦你發佈標題,你就有了不知多少時間來完成你的工作。 @ palladium:簡單地調用頭文件不會啓動重定向 - 只有在頭文件實際發送給客戶端時纔會啓動,客戶端可以是「現在」或「稍後」。 –