2013-08-01 75 views
0

我有一個簡單的PHP腳本,一旦運行,我就無法訪問服務器上的任何其他頁面。簡單的PHP腳本使服務器負載很重

腳本是如此簡單:

for($league=11387; $league<=11407; $league++){ 
for($i=1; $i<9; $i++){ 

    //gets the team object here from external resource 
    $team = $HT->getYouthTeam($HT->getTeam($HT->getLeague($league)->getTeam($i)->getTeamId())->getYouthTeamId()); 

    if($team->getId() != 2286094){ 
     $youthTeams[] = $team; 
    } 

    set_time_limit(10); 
} 
} 

很顯然,我應該得到「團隊」在這裏的數千名(除了一個用2286094的ID),但一旦我運行此腳本,我不能打開服務器上的任何其他頁面,直到結束爲止,並且需要很長時間才能將腳本提取到$ youthTeams陣列中。

我的目的是創建一個進度條,可以精確地(以%爲單位)顯示腳本的位置,但由於此腳本無法讓服務器顯示任何其他頁面(您可以獲得其他任何頁面「加載」,但它永遠不會加載,因爲這個腳本正在服務器上運行)。

此外,加入子問題:一旦所有這些數據被提取,是否聰明的插入一個單一的查詢mysql數據庫?

我真的想在這方面學得更多,並希望完成這個,所以請幫助我解決這個問題。

+1

您可能正在使用基於文件的會話,這意味着您的這個腳本在執行其> - getTeam內容時會對會話鎖定。嘗試在循環前添加'session_write_close()'來釋放會話鎖定。這將允許你擊中該網站的其他部分。 –

+0

非常感謝你好人!我已經做了一個解決方法,所以即使沒有啓動會話,我也可以真正運行該文件(它是cron作業),並且不會「凍結」服務器的其餘部分。它現在在工作,但如果你願意分享,我想更多地瞭解幕後發生的事情。 :-) –

回答

0

也許你可以通過檢查時間來確定哪個查找時間吃得最多?

$t0=microtime(1); 
$teamid=$HT->getLeague($league)->getTeam($i)->getTeamId(); 
echo "lookup teamid: ".(($t1=microtime(1))-$t0)."<br>"; 
if (if($team->getId() != 2286094) { 
    $youthteamid=$HT->getTeam($teamid)->getYouthTeamId(); 
    echo "lookup youthteamid: ".(($t2=microtime(1))-$t1)."<br>"; 
    $youthteam = $HT->getYouthTeam($youthteamid); 
    echo "lookup youthteam: ".(($t3=microtime(1))-$t2)."<br>total time: ".($t3-$t0)."<br>"; 
} 
+0

他們都需要或多或少的等量時間來返回結果。 不過,我遇到的問題是服務器上的其他頁面都無法打開。任何其他想法,你可以想出來? –