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 传递给它。问题可能出在其他地方。这听起来像你遇到的麻烦吗?
我在 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 传递给它。问题可能出在其他地方。这听起来像你遇到的麻烦吗?