检查站点是否已启动或关闭

时间:2014-07-05 03:38:15

标签: php

如果我检查http://google.com/或其他网站不起作用且http://stackoverflow.com或cnn.com正常工作,我对此脚本有疑问...

$url = 'http://google.com/';

function urlExists($url=NULL)
{
    if($url == NULL) return false;
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $data = curl_exec($ch);
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    if($httpcode>=200 && $httpcode<300){
        return true;
    } else {
        return false;
    }
}

if(urlExists($url))
{
    echo "ok";
}
else
{
    echo "no";
}

我有测试@fopen而且也没有工作

google这样的网站有拦截器吗?感谢

3 个答案:

答案 0 :(得分:0)

你应该改变:

if($httpcode>=200 && $httpcode<300){

为:

if($httpcode>=200 && $httpcode<303){

原因是许多网站默认使用301 Moved Permanently以及302 Found

答案 1 :(得分:0)

您正在使用响应代码http://google.com响应301,以便将访问者重定向到http://www.google.com。在您的逻辑中,301响应代码被视为离线。

您需要调整正在检查的网址,调整逻辑以接受此响应代码,或者添加以下代码以使cURL遵循重定向。

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

答案 2 :(得分:0)

应该阅读

if($httpcode>=200 && $httpcode<400){

而不是

if($httpcode>=200 && $httpcode<300){

否则,重定向将被视为“服务器关闭”。

通过上述更改,http://google.com的结果为ok