在不知道协议的情况下检查是否存在外部网址

时间:2018-07-15 01:27:24

标签: php url protocols

我有外部域,例如 www.php-einfach.de ,并首先检查它们是否与checkdnsrr()存在。现在,我必须检查该域上是否存在特定页面,例如 www.php-einfach.de/impressum 。我找到了一些解决方案,但是它们都使用协议类型。而且我不知道协议是http还是https。我以为我总是使用http时会得到正确的结果,因为在leat上每个网站都有这个。但是具有此功能:

function check_url($url){
$file_headers = @get_headers($url);
if(!$file_headers || $file_headers[0] == 'HTTP/1.1 404 Not Found') {
   return false;
}
else {
   return true;
}
}

当使用http和https并将 www.php-einfach.de/impressum 设为$url时,我会得到不同的结果。

所以我使用了另一个功能:

function check_protocol($url){
$ch = curl_init("https://".$url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT,10);
$output = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpcode >= 200 && $httpcode < 400) {
   return "https://";
}
else{
   return "http://";
}
}

确定协议是http还是https。 因此,如果要检查网址,则必须执行以下操作:

check_url(check_protocol('www.php-einfach.de')."www.php-einfach.de/impressum")

但是我很确定我将这种方法变得复杂了。有谁有一个更简单的解决方案?

谢谢

0 个答案:

没有答案