2013-03-13 103 views
3

我使用下面的函數獲取從一系列重定向的URL最終函數循環...停止PHP,而與條件

https://stackoverflow.com/a/4102293/1183476

它工作的時間偉大的99.8%。我無法真正查明異常情況,但我認爲它與另一端的服務器有關,每次訪問都會生成一個新的隨機URL。因此,這個腳本陷入了無限循環。

複製的問題與更換get_redirect_url功能...

function get_redirect_url($url){ 
    return $url.'x'; 
} 

問題

我怎樣才能設置一個時間或迭代限制?

我覺得我已經嘗試了一切。我試圖在while循環中尋找下一個URL的基於時間的條件,但它不工作,我不知道爲什麼。像這樣...

function get_all_redirects($url){ 
    $redirects = array(); 
    $start = time(); 
    while ($newurl = get_redirect_url($url) && time()-$start < 10){ 
     if (in_array($newurl, $redirects)){ 
      break; 
     } 
     $redirects[] = $newurl; 
     $url = $newurl; 
    } 
    return $redirects; 
} 

我也試圖重複計數這樣......

function get_all_redirects($url){ 
    $redirects = array(); 
    $i = 0; 
    while ($newurl = get_redirect_url($url) && $i < 10){ 
     if (in_array($newurl, $redirects)){ 
      break; 
     } 
     $redirects[] = $newurl; 
     $url = $newurl; 
     $i++; 
    } 
    return $redirects; 
} 

以上事例只是衆多的2失敗的嘗試。我已經準備好尋求幫助。提前致謝。

+0

你的計數interations代碼應該工作。試試'echo $ i。'
';'看看爲什麼它沒有完成。 – Ranty 2013-03-13 08:53:04

回答

1

只是掃描(一秒鐘)你的代碼不會顯示任何明顯的問題,但我想提出一些建議。

每當我看到條件語句中使用它總是聞腥的分配結果的控制流語句(好吧,讓說,它不是我的風格):

while ($newurl = get_redirect_url($url) ... 

我可以打賭,通過猛拉那項任務/條件或任何你想調用它,你的代碼將變得更具可讀性和可維護性,並通過一些快樂的機會解決你所看到的問題。

1

我假設,你所說的循環是一個真正的循環,因此迭代不起作用,因爲如果URL已經在數組中,則在增加之前斷開這裏休息。

if (in_array($newurl, $redirects)){ 
    break; 
} 

爲什麼計時器不工作,我不知道。但通過將$i++;置於循環的頂部來固定增量應至少改善您的情況。

0

有一個在一個問題:

while ($newurl = get_redirect_url($url) && time()-$start < 10) 

和一些括號應該加各地$newurl = get_redirect_url($url)

while (($newurl = get_redirect_url($url)) && time()-$start < 10) 

代替,因爲&&=更高的優先級。否則$newurl獲得條件表達式get_redirect_url($url) && time()-$start < 10的結果,即1