目前我正在使用以下功能
function urlExist($url)
{
$handle = curl_init($url);
if (false === $handle)
{
return false;
}
curl_setopt($handle, CURLOPT_HEADER, false);
curl_setopt($handle, CURLOPT_FAILONERROR, true); // this works
curl_setopt($handle, CURLOPT_HTTPHEADER, Array("User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15") ); // request as if Firefox
curl_setopt($handle, CURLOPT_NOBODY, true);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, false);
$connectable = curl_exec($handle);
##print $connectable;
curl_close($handle);
return $connectable;
}
它适用于简单的网址,但不适用于重定向到其他网域的网址
答案 0 :(得分:6)
您需要设置FOLLOWLOCATION
:
curl_setopt($handle, CURLOPT_FOLLOWLOCATION, true);
然而,这里发出GET请求是没有意义的。简单的HEAD更轻,因为只传输标题。为此,请将NOBODY
设置为true:
curl_setopt($handle, CURLOPT_NOBODY, true);
答案 1 :(得分:0)
我正在使用相同的功能,但我没有遇到域trieuvieclam.com重定向到新域的问题。我正在使用CHROME浏览器
function url_exists($url) {
$handle = curl_init($url);
if (false === $handle)
{
return false;
}
curl_setopt($handle, CURLOPT_HEADER, false);
curl_setopt($handle, CURLOPT_FAILONERROR, true); // this works
curl_setopt($handle, CURLOPT_HTTPHEADER, Array("User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15") ); // request as if Firefox
curl_setopt($handle, CURLOPT_NOBODY, true);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, false);
curl_setopt($handle, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($handle, CURLOPT_CONNECTTIMEOUT, 3);
$connectable = curl_exec($handle);
##print $connectable;
curl_close($handle);
if($connectable){
return true;
}
return false;
}
我尝试更改此行:curl_setopt($handle, CURLOPT_FOLLOWLOCATION, true);
到false
,但结果仍然相同(存在域名)。
if (false === $handle)
{
return false;
}
这个条件永远不会满足任何字符串,甚至不是网址,也许只有在服务器不支持curl时才匹配。