我读过很多关于这个标题的问题。基本上我使用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的状态代码200(“http://www.asdkkk.com”)。在网址中是一个找不到网页的网页。但似乎它是托管的,页面的标题没有设置为404.我不仅尝试了这个网址,还尝试了其他网址。那么如何以非常准确的方式确定URL实际存在?
答案 0 :(得分:1)
我认为您的示例代码的问题是您在服务器上遇到“未找到”的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>";
}