在检查 URL 是否存在 PHP 时遇到问题


Having issues with checking whether a URL exists PHP

我读过很多关于标题的问题。基本上,我正在使用getheader和curl的组合来检查是否存在url。

$url = "http://www.asdkkk.com";
$headers = get_headers($url);  
if(strpos($headers[0],'404') === false){
    $ch = curl_init($url); 
    curl_setopt_array($ch,array(
                            CURLOPT_HEADER => true,
                            CURLOPT_RETURNTRANSFER => true,
                            CURLOPT_FOLLOWLOCATION => true,
                            CURLOPT_SSL_VERIFYPEER => false,
                            CURLOPT_HTTPHEADER     => array("Accept-Language: en-US;q=0.6,en;q=0.4"),
                            CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.6 (KHTML, like Gecko) Chrome/16.0.897.0 Safari/535.6'  
                           ));
    $data = curl_exec($ch); 
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    if($httpCode != 404){
        curl_close($ch); 
        return $data;
    }
}else{
  echo "URL Not Exists";
}

这两个函数都将返回 url("http://www.asdkkk.com") 的状态代码 200。在网址中是一个页面找不到的网站。但它似乎是托管的,页面的标题没有设置为 404。我不仅尝试了这个网址,还尝试了其他网址。那么,如何以非常准确的方式确定URL确实存在呢?

我认为您的示例代码的问题在于您将来自服务器的"未找到"的 404 HTTP 响应代码与根本不指向任何服务器的 URL 的情况混淆了。如果根本没有服务器响应,cURL 将返回"0"作为 HTTP 响应,而不是 404。尝试运行以下代码,看看它是否适合您的目的:

$urls = array(
    "http://www.asdkkk.com",
    "http://www.google.com/cantfindthisurl",
    "http://www.google.com",
);
$ch = curl_init();
foreach($urls as $url){
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_exec($ch);
    $http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    echo "$http_status for $url <br>";
}