2013-04-25 86 views
0

我寫了一個腳本,從數據庫中導出數據,然後把它放到XML文件。腳本在無限while循環中運行,並帶有適當的break語句(任務完成後)。任務需要10分鐘。當我發起http請求開始一項工作時,我正在使用的瀏覽器完全凍結 - 不僅請求了URL,而且還請求了整個主機。在與其他瀏覽器同時,我可以瀏覽包含我的腳本的網頁。運行腳本後,瀏覽器掛起。其他瀏覽器的工作

摘錄我的PHP腳本:

while(true) 
{ 
    if($i === $z) 
    { 
     break; 
    } 

    foreach((array)$this->project as $project) 
    { 
     makeYourJob(); 
     usleep(1000000); 
     $z++; 
    } 
    usleep(2000000); 
} 

腳本與這個jQuery代碼中調用(HTML網頁,其中包含此代碼的I型地址):

$.get("cron.php"); 

我也試着鍵入的cron URL欄和瀏覽器中的.php也會掛起。爲什麼運行腳本的瀏覽器會凍結?如何避免這種情況?

編輯: 由ajax或用戶做一個簡單的獲取/發佈請求不會解決問題。這篇文章不是重複的。這裏有一個解決方案:

exec("wget http://www.domain.com/scrip_name.php > /dev/null &"); 
+1

爲什麼你使用while(true)而不是像while($ i!== $ z)那樣的東西? – 2013-04-25 13:58:32

+0

'while(true)' - theres你的問題。 – Nick 2013-04-25 13:58:42

+0

爲什麼不把它作爲控制面板上的實際cron腳本運行,並取消了超時設置,以便cron瀏覽器(如果使用wget)能夠運行它而不是自己的瀏覽器? – 2013-04-25 14:00:39

回答

0

很明顯,打破死循環的if語句沒有被調用。

你可以檢查$ i和$ z的初始值嗎?另外,===檢查2個變量是否具有相同的值和相同的值。我建議你檢查$ i和$ z變量的類型。

+0

這只是一個片段。 $ i是int並被設置爲0.如果語句確實已達到。 – 2013-04-25 14:03:31