使用PHP检查是否存在远程页面?

时间:2009-11-12 14:38:53

标签: php http

在PHP中,如何确定是否存在任何远程文件(通过HTTP访问)?

6 个答案:

答案 0 :(得分:8)

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 10); //follow up to 10 redirections - avoids loops
$data = curl_exec($ch);
curl_close($ch);
if (!$data) {
  echo "Domain could not be found";
}
else {
  preg_match_all("/HTTP\/1\.[1|0]\s(\d{3})/",$data,$matches);
  $code = end($matches[1]);
  if ($code == 200) {
    echo "Page Found";
  }
  elseif ($code == 404) {
    echo "Page Not Found";
  }
}

来自here的修改后的代码版本。

答案 1 :(得分:2)

我喜欢curl或fsockopen来解决这个问题。任何一个都可以提供有关所请求文件状态的标题数据。具体来说,您将寻找404(找不到文件)响应。这是我与fsockopen一起使用的一个例子:

http://www.php.net/manual/en/function.fsockopen.php#39948

答案 2 :(得分:2)

此函数将返回响应代码(重定向时为最后一个),如果出现dns或其他错误,则返回false。如果提供了一个参数(url),则发出HEAD请求。如果给出第二个参数,则发出完整请求,并且响应的内容(如果有)通过引用存储在作为第二个参数传递的变量中。

function url_response_code($url, & $contents = null)
{
    $context = null;
    if (func_num_args() == 1) {
        $context = stream_context_create(array('http' => array('method' => 'HEAD')));
    }
    $contents = @file_get_contents($url, null, $context);
    $code = false;
    if (isset($http_response_header)) {
        foreach ($http_response_header as $header) {
            if (strpos($header, 'HTTP/') === 0) {
                list(, $code) = explode(' ', $header);
            }
        }
    }
    return $code;
}

答案 3 :(得分:1)

我最近在寻找相同的信息。在这里找到了一些非常好的代码:http://php.assistprogramming.com/check-website-status-using-php-and-curl-library.html

    function Visit($url){

    $agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
    $ch = curl_init();
    curl_setopt ($ch, CURLOPT_URL,$url );
    curl_setopt($ch, CURLOPT_USERAGENT, $agent);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch,CURLOPT_VERBOSE,false);
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    $page=curl_exec($ch);
    //echo curl_error($ch);
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);




    if($httpcode >= 200 && $httpcode < 300){ 
        return true;
    }
    else {
        return false;
    }

}

    if(Visit("http://www.site.com")){
        echo "Website OK";
    }
    else{
        echo "Website DOWN";
    }

答案 4 :(得分:0)

答案 5 :(得分:0)

请注意,这些解决方案不适用于未找到未找到页面的相应响应的网站。例如,我在测试网站上的页面时遇到了问题,因为它只是在收到无法处理的请求时才加载主网站页面。因此,即使对于不存在的页面,该网站也几乎总是会给出200响应。

某些网站会在标准网页上提供自定义错误,但仍然不会提供404标题。

除非您知道页面的预期内容并开始测试预期的内容是否存在,或者测试页面中的某些预期错误文本,否则您无法在这些情况下执行此操作,这一切都变得有点混乱... < / p>