判断远程url是否有效

使用PHP解决

  • 使用file_get_contents函数,不过优缺点如果url无法访问,会出现终止程序问题
  • 使用curl返回,然后判断是否正确执行
  • 使用get_headers函数,根据HTTP返回值查看是否有200

需要配置

  •       allow_url_fopen=on  修改php.ini,运行使用远程打开

函数介绍

array get_headers ( string $url [, int $format ] )

get_headers() 返回一个数组,包含有服务器响应一个 HTTP 请求所发送的标头。
如果失败则返回 FALSE 并发出一条 E_WARNING 级别的错误信息。
如果将可选的 format 参数设为 1,则 get_headers() 会解析相应的信息并设定数组的键名。 例如:

[work@localhost root]$ php -r export(get_headers('http://baidu.com',1));"
array (
  0 => 'HTTP/1.1 200 OK',
  'Date' => 'Mon, 07 Oct 2013 02:07:20 GMT',
  'Server' => 'Apache',
  'Cache-Control' => 'max-age=86400',
  'Expires' => 'Tue, 08 Oct 2013 02:07:20 GMT',
  'Last-Modified' => 'Tue, 12 Jan 2010 13:48:00 GMT',
  'ETag' => '"51-4b4c7d90"',
  'Accept-Ranges' => 'bytes',
  'Content-Length' => '81',
  'Connection' => 'Close',
  'Content-Type' => 'text/html',
)

[work@localhost root]$ php -r "var_export(get_headers('http://baidu.com'));"
array (
  0 => 'HTTP/1.1 200 OK',
  1 => 'Date: Mon, 07 Oct 2013 02:17:34 GMT',
  2 => 'Server: Apache',
  3 => 'Cache-Control: max-age=86400',
  4 => 'Expires: Tue, 08 Oct 2013 02:17:34 GMT',
  5 => 'Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT',
  6 => 'ETag: "51-4b4c7d90"',
  7 => 'Accept-Ranges: bytes',
  8 => 'Content-Length: 81',
  9 => 'Connection: Close',
  10 => 'Content-Type: text/html',
)

自定义get_headers()函数:

if (!function_exists('get_headers')) {   //使用前,最好检测
function get_headers($url, $format=0) {
    $headers = array();
    $url = parse_url($url);
    $host = isset($url['host']) ? $url['host'] : '';
    $port = isset($url['port']) ? $url['port'] : 80;
    $path = (isset($url['path']) ? $url['path'] : '/') . (isset($url['query']) ? '?' . $url['query'] : '');
    $fp = fsockopen($host, $port, $errno, $errstr, 3);
    if ($fp)
    {
        $hdr = "GET $path HTTP/1.1\r\n";
        $hdr .= "Host: $host \r\n";
        $hdr .= "Connection: Close\r\n\r\n";
        fwrite($fp, $hdr);
        while (!feof($fp) && $line = trim(fgets($fp, 1024)))
        {
            if ($line == "\r\n") break;
            list($key, $val) = explode(': ', $line, 2);
            if ($format)
                if ($val) $headers[$key] = $val;
                else $headers[] = $key;
            else $headers[] = $line;
        }
        fclose($fp);
        return $headers;
    }
    return false;
}
}

只想获取状态码:

<?php
function get_http_response_code($theURL) {
     $headers = get_headers($theURL);
     return substr($headers[0], 9, 3);
 }
?>

页面有重定向怎么办?

$url = 'http://google.com';
var_dump(get_headers($url,0));
 array(18) {
   [0]=>  string(30) "HTTP/1.0 301 Moved Permanently"
   [1]=>  string(32) "Location: http://www.google.com/"
   [2]=>  string(38) "Content-Type: text/html; charset=UTF-8"
   [3]=>  string(35) "Date: Sun, 26 Sep 2010 00:59:50 GMT"
   [4]=>  string(38) "Expires: Tue, 26 Oct 2010 00:59:50 GMT"
   [5]=>  string(38) "Cache-Control: public, max-age=2592000"
....
   string(15) "HTTP/1.0 200 OK"
   [10]=>  string(35) "Date: Sun, 26 Sep 2010 00:59:51 GMT"
   [11]=>  string(11) "Expires: -1"
   [12]=>  string(33) "Cache-Control: private, max-age=0"
.....
 }

/*===========================*/

var_dump(get_headers($url,1));
 array(11) {
   [0]=>
   string(30) "HTTP/1.0 301 Moved Permanently"
   ["Location"]=>  string(22) "http://www.google.com/"
   ["Content-Type"]=>  array(2) {
     [0]=>    string(24) "text/html; charset=UTF-8"
     [1]=>    string(29) "text/html; charset=ISO-8859-1"
   }
   ["Date"]=>  array(2) {
     [0]=>    string(29) "Sun, 26 Sep 2010 01:03:39 GMT"
     [1]=>    string(29) "Sun, 26 Sep 2010 01:03:39 GMT"
   }
   ["Expires"]=>  array(2) {
     [0]=>    string(29) "Tue, 26 Oct 2010 01:03:39 GMT"
     [1]=>    string(2) "-1"
   }
   ["Cache-Control"]=>  array(2) {
     [0]=>    string(23) "public, max-age=2592000"
     [1]=>    string(18) "private, max-age=0"
   }
 .....
 } 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

anssummer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值