PHP:检查网站是否在线

时间:2015-03-23 12:26:29

标签: php curl web

我在php中有一个基于curl的函数来检查一个网站是否在线工作正常但是我注意到它只适用于http链接而不是https链接。

是否有人知道如何更新此功能以支持https链接。

function isDomainAvailible($domain){
    // Check, if a valid url is provided
    if(!filter_var($domain, FILTER_VALIDATE_URL)){
        return false;
    }

    // Initialize curl
    $curlInit = curl_init($domain);
    curl_setopt($curlInit,CURLOPT_CONNECTTIMEOUT,10);
    curl_setopt($curlInit,CURLOPT_HEADER,true);
    curl_setopt($curlInit,CURLOPT_NOBODY,true);
    curl_setopt($curlInit,CURLOPT_RETURNTRANSFER,true);

    // Get answer
    $response = curl_exec($curlInit);

    curl_close($curlInit);

    if ($response){ 
        return true;
    } else { 
        return false;
    }
}

3 个答案:

答案 0 :(得分:1)

如果您想使用您的功能,那么您需要https支持。您可以下载此文件cacert.pem并在函数中添加路径,如:

function isDomainAvailible($domain){
// Check, if a valid url is provided
if(!filter_var($domain, FILTER_VALIDATE_URL)){
    return false;
}

// Initialize curl
$curlInit = curl_init($domain);
curl_setopt($curlInit,CURLOPT_CONNECTTIMEOUT,10);
curl_setopt($curlInit,CURLOPT_HEADER,true);
curl_setopt($curlInit,CURLOPT_NOBODY,true);
curl_setopt($curlInit,CURLOPT_RETURNTRANSFER,true);
curl_setopt($curlInit, CURLOPT_PROTOCOLS, CURLPROTO_HTTPS);
curl_setopt($curlInit, CURLOPT_PROTOCOLS, CURLPROTO_HTTP);
curl_setopt ($curlInit, CURLOPT_CAINFO, dirname(__FILE__)."/cacert.pem");
// Get answer
$response = curl_exec($curlInit);

curl_close($curlInit);

   if ($response){ 
    return 1;
   } else { 
    return 0;
   }
}
$domain = 'https://www.facebook.com';
$avi = isDomainAvailible($domain);
echo $avi;

答案 1 :(得分:1)

尝试在curl函数中添加它

curl_setopt($curlInit, CURLOPT_SSL_VERIFYPEER, false);

答案 2 :(得分:1)

当你说,"我注意到它只适用于http链接而不是https链接",你的意思是什么? cURL以相同的方式工作,您只需使用https协议而不是http传递URL。问题可能是其他问题。这听起来像你遇到的麻烦吗? How to send HTTPS posts using php