2016-06-17 30 views
4

我正在製作一個網站,檢查網站是否正常工作和生活。我傳入我想檢查的網站的URL,下面的代碼將檢查該網站是否有效,並返回HTTP響應代碼以及是或否。HTTP響應代碼0 - 網站正在工作

function urlExists($url=NULL) 
{ 
    if($url == NULL) return false; 
    $ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 5); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    $data = curl_exec($ch); 
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
    curl_close($ch); 
    if ($httpcode == 0) { 
     return array (false, $httpcode); 
    } 
    else if($httpcode < 400){ 
     return array (true, $httpcode); 
    } else { 
     return array (false, $httpcode); 
    } 
} 

隨着我測試,雖然我得到的0 HTTP響應代碼,即使我知道該網站是生活和工作的場所之一。

該網站是非常緩慢的,因爲它是一個非常強大的服務器上的大型網站,所以響應時間可以在7到25秒之間變化。

任何幫助將不勝感激。

感謝,

山姆

+4

因爲服務器的響應時間是7-25秒,並且您將'CURLOPT_CONNECTTIMEOUT'設置爲5秒,這就是爲什麼您得到0的原因,因爲在響應到來之前連接已關閉。將其更改爲300並檢查: - https://curl.haxx.se/libcurl/c/CURLOPT_CONNECTTIMEOUT.html –

+1

@Anant謝謝,真的有幫助。我還需要將CURLOPT_TIMEOUT增加到300。 –

回答

2

我會爲您提供2個替代方案供您比較 - 以及您的curl()函數,您將有3個選項來查看哪個方案更好/更快。

選項A(所有PHP版本),要求fopen()函數被激活:

if (!$fp = fopen($url, 'r')) 
{ 
    trigger_error("Unable to open URL ($url)", E_USER_ERROR); 

} 
$headers = stream_get_meta_data($fp); 
fclose($fp);  
$http_header_info = $headers['wrapper_data'][0]; 
$httpCode = (int)substr($http_header_info, 9, 3); 


選項B(PHP5 +):

$headers = get_headers($url, 1); 
$http_header_info = $headers[0]; 
$httpCode = substr($http_header_info, 9, 3); 

此外,如果任何人有這3種方法的基準,我很好奇,看看哪一種更合適(當然只適用於檢索http響應頭文件)

相關問題