我很新的PHP,我目前工作的一個服務,其中一部分包括短網址,我把一切都建立正常使用頭重定向: PHP - 發送HTTP重定向頭後,執行昂貴代碼
<?php
if (code_exists($code)) {
// this code gets url for redirect:
$url_query = mysql_query("SELECT * FROM urls WHERE code = '".$code."'");
$url = mysql_result($url_query,0,'url');
$id = mysql_result($url_query,0,'url_id');
// this code redirects user
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Thu, 1 Jan 1970 00:00:00 GMT");
header("HTTP/1.1 301 Moved Permanently");
header("Location: ".$url);
// this code executes a function, takes 3 - 4 seconds to return
$affected = dostuff($id);
} else {
echo "Code Error: ".$code;
}
?>
行$affected = dostuff($id);
正在調用幾個外部API並將結果寫入一個mysql表(通常爲100 +行)。
的問題是,因爲外部API和添加行需要幾秒鐘,用戶被重定向意思是不好的用戶體驗之前等待這一點。
有沒有我可以建立併發送標頭不執行代碼的用戶被暫停什麼辦法?
或者是有沒有「踢掉」另一個劇本,但它傳遞$id
參數的方法嗎?
我寧願避免使用cron作業如果可能的話,因爲這些混淆了我的地獄:)。
任何幫助非常感謝。
這是做這件事的一個壞方法。實現一些由cron運行的worker,並從你的php腳本中爲它添加任務。或者,優化'dostuff',以便在重定向之前執行並放置它需要一段時間 – zerkms 2012-03-20 21:10:16
請查看http://stackoverflow.com/questions/1436575/can-a-php-script-trick-the-browser-進入思考的HTTP請求是 – sbstjn 2012-03-20 21:17:51
我明白我承擔的方式是不理想的,但當我能夠設置cron作業等我可能有足夠的經驗內在功能目前我依靠API。這將讓我大量優化'dostuff'! – bendataclear 2012-03-20 21:40:34