2012-03-13 178 views
1

我使用PHP從數據庫中獲取URL列表。每個網址都由PHP中的Check_URL Function檢查,它使用curl來檢查網站是否生效。使用捲曲和PHP

function Check_URL($url) { 

    $agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"; 
    $ch = curl_init(); 
    curl_setopt ($ch, CURLOPT_URL, $url); 
    curl_setopt ($ch, CURLOPT_USERAGENT, $agent); 
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt ($ch, CURLOPT_TIMEOUT, 3); 
    $page = curl_exec($ch); 
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 

    curl_close($ch); 
    if ($httpcode >= 200 && $httpcode <= 301) { 
     return true; 
    } else { 
     return false; 
    } 
} 

不幸的是,頁面需要永久加載。我讀過curl_multi_init();可能是我的解決方案,但我不知道如何將其實現到我所擁有的。提前致謝。

+0

所以,當你在你的服務器上加載一個頁面時,這個函數被調用並檢查一些urls數量?這意味着不僅是你的頁面加載,而且你還在等待X URL被CURL加載。您加載了多少個網址?您可能想要考慮讓其他內容觸發您的腳本,如您的網頁上的圖像。 – Aerik 2012-03-13 23:02:57

+1

這是你應該在後臺真正做的事情,與爲用戶呈現頁面的線程分開。將這些URL的任務投入到Beanstalkd中,並編寫一個工作者來測試它們並將結果存儲在數據庫中。 – 2012-03-13 23:04:09

+0

@Aerik - 30個網址開始。 – Joe 2012-03-13 23:05:06

回答

0

在初始化curl_multi_init之後,您需要在for或foreach循環中迭代您的URL。 YOu會在這裏找到一個很好的例子:http://www.fusionswift.com/examples/2011/08/php-curl_multi_exec-example/

對於你的函數,我會讓它處理一個URL數組作爲參數。

+1

聽起來像很好的輸入,節省重新初始化的開銷,但他仍然會加載30 urls ...我認爲他需要在他的網頁上有一個圖像加載PHP腳本來檢查網址或使用AJAX或東西。 – Aerik 2012-03-13 23:07:31

+1

@Aerik - 你絕對是對的 - 如果頁面正在等待所有這些URL加載或測試,那麼對於最終用戶來說這不是一個好的UI體驗。另一種方法是加載初始頁面,然後在AJAX調用中處理這個功能,同時給用戶一些類型的信息性消息。 – SBerg413 2012-03-13 23:12:09

0

也使用CURLOPT_CONNECTTIMEOUT選項。

如果將CURLOPT_NOBODY設置爲TRUE,那麼您的函數可以更快地工作。

this code如果你想檢查多個網址。