使用PHP cURL检查url是否存在

时间:2012-04-11 09:50:12

标签: php curl

目前我正在使用以下功能

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;
}

它适用于简单的网址,但不适用于重定向到其他网域的网址

2 个答案:

答案 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时才匹配。