PHP: 检查网站是否在线

PHP: Check if a website is online

我在 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;
    }
}

如果您想使用您的功能并且它需要 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;

尝试在 curl 函数中添加这个

curl_setopt($curlInit, CURLOPT_SSL_VERIFYPEER, false);

当您说 "i have noticed that it only works for http links and not https links" 时,您到底是什么意思? cURL 的工作方式相同,您只需使用 https 协议而不是 http 将 url 传递给它。问题可能出在其他地方。这听起来像你遇到的麻烦吗?