PHP可以通过使用cURL(Client URL Library)以及fsockopen函数来检测网址是否能够正常打开。
使用cURL检测网址的可达性
cURL是一个强大的工具,它支持各种协议,包括 HTTP, HTTPS, FTP 等,并且可以进行很多高级操作,如 SSL 连接、POST 请求等。
我们可以使用curl_exec()函数来检测网址是否能够正常打开。调用此函数时,如果返回false,则表示该网址无法正常打开。示例如下:
$url = "http://www.example.com";
$handle = curl_init($url);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, TRUE);
$response = curl_exec($handle);
$httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
if($httpCode == 200) {
echo "网址正常";
} else {
echo "网址不可达";
}
curl_close($handle);
上述代码中,首先使用curl_init()
函数初始化一个curl句柄,然后使用curl_setopt()
函数设置curl选项,这里我们使用CURLOPT_RETURNTRANSFER
选项将获得的响应转化为字符串并返回。
然后调用curl_exec()
函数获取网页内容。
最后使用curl_getinfo()
函数获取HTTP响应码,根据HTTP响应码判断网址的可达性。
使用fsockopen函数检测网址的可达性
与cURL相比,fsockopen函数使用更为简单。我们可以使用fsockopen函数手动建立一个TCP连接,并向服务器发送HTTP/1.1请求头,获取HTTP响应头信息,从而检测目标网站是否可达。
简单示例如下:
function checkUrl($sUrl) {
$iPos = strpos($sUrl, ':');
$sProtocol = substr($sUrl, 0, $iPos); //获取协议类型
$sHost = substr($sUrl, $iPos + 3); //获取主机名(域名)
$iPort = ($sProtocol == 'https') ? 443 : 80; //设置端口号
//与服务器建立连接
$fp = @fsockopen($sHost, $iPort, $iErrno, $sErrstr, 20);
if(!$fp) {
return false;
}
//发送HTTP请求头
$sHeader = "HEAD / HTTP/1.1\r\n";
$sHeader .= "Host: " . $sHost . "\r\n";
$sHeader .= "Connection: Close\r\n\r\n";
fwrite($fp, $sHeader);
//接收HTTP响应头信息
$sContent = '';
while (!feof($fp)) {
$sContent .= fgets($fp, 128);
}
fclose($fp);
//提取HTTP响应状态码
$aLines = explode("\n", $sContent);
if(preg_match('/^HTTP\/1\.[01] (\d+)/', $aLines[0], $aMatches)) {
$iStatusCode = intval($aMatches[1]);
if($iStatusCode == 200) {
return true;
}
}
return false;
}
//检测网址是否可达
$sUrl = "http://www.example.com";
if(checkUrl($sUrl)) {
echo "网址正常";
} else {
echo "网址不可达";
}
上述代码中,首先我们根据目标网址的协议类型,确定需要连接的端口号。然后使用fsockopen函数与服务器建立连接。
接着,我们构建HTTP/1.1请求头,并使用fwrite函数将请求头信息发送到服务器。
最后,我们使用fgets函数循环读取HTTP响应头信息,并从中提取HTTP响应状态码。根据HTTP响应状态码,我们判断目标网址是否可达。
综上,我们可以使用cURL和fsockopen函数检测网址的可达性,使用方法灵活简单,同时也可以根据需求进行定制和扩展,是检测网址的理想工具。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP简单检测网址是否能够正常打开的方法 - Python技术站