判断远程文件是否存在的PHP函数

可以利用get_headers 函数判断远程文件是否存在

 

 

get_headers函数说明 : 取得服务器响应一个 HTTP 请求所发送的所有标头

 

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

 

get_headers() 返回一个数组,包含有服务器响应一个 HTTP 请求所发送的标头。如果失败则返回 FALSE 并发出一条 E_WARNING 级别的错误信息。

如果将可选的 format 参数设为 1,则 get_headers() 会解析相应的信息并设定数组的键名。

 

Note: 自 PHP 5.1.3 起本函数使用参数,其可以用 stream_context_get_default() 函数设定和修改。

 

 

Example#1 get_headers()函数使用例子

<?php
$url = 'http://www.example.com';

print_r(get_headers($url));

print_r(get_headers($url, 1));
?>

 

上例的输出类似于:

 

Array
(
    [0] => HTTP/1.1 200 OK
    [1] => Date: Sat, 29 May 2004 12:28:13 GMT
    [2] => Server: Apache/1.3.27 (Unix)  (Red-Hat/Linux)
    [3] => Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
    [4] => ETag: "3f80f-1b6-3e1cb03b"
    [5] => Accept-Ranges: bytes
    [6] => Content-Length: 438
    [7] => Connection: close
    [8] => Content-Type: text/html
)

Array
(
    [0] => HTTP/1.1 200 OK
    [Date] => Sat, 29 May 2004 12:28:14 GMT
    [Server] => Apache/1.3.27 (Unix)  (Red-Hat/Linux)
    [Last-Modified] => Wed, 08 Jan 2003 23:11:55 GMT
    [ETag] => "3f80f-1b6-3e1cb03b"
    [Accept-Ranges] => bytes
    [Content-Length] => 438
    [Connection] => close
    [Content-Type] => text/html
)

 


自定义函数:

<?php
     function get_headers_x($url,$format=0, $user='', $pass='', $referer='') {
          if (!empty($user)) {
              $authentification = base64_encode($user.':'.$pass);
              $authline = "Authorization: Basic $authentification/r/n";
          }

          if (!empty($referer)) {
              $refererline = "Referer: $referer/r/n";
          }

          $url_info=parse_url($url);
          $port = isset($url_info['port']) ? $url_info['port'] : 80;
          $fp=fsockopen($url_info['host'], $port, $errno, $errstr, 30);
          if($fp) {
              $head = "GET ".@$url_info['path']."?".@$url_info['query']." HTTP/1.0/r/n";
              if (!empty($url_info['port'])) {
                  $head .= "Host: ".@$url_info['host'].":".$url_info['port']."/r/n";
              } else {
                  $head .= "Host: ".@$url_info['host']."/r/n";
              }
              $head .= "Connection: Close/r/n";
              $head .= "Accept: */*/r/n";
              $head .= $refererline;
              $head .= $authline;
              $head .= "/r/n";

              fputs($fp, $head);       
              while(!feof($fp) or ($eoheader==true)) {
                  if($header=fgets($fp, 1024)) {
                      if ($header == "/r/n") {
                          $eoheader = true;
                          break;
                      } else {
                          $header = trim($header);
                      }

                      if($format == 1) {
                      $key = array_shift(explode(':',$header));
                          if($key == $header) {
                              $headers[] = $header;
                          } else {
                              $headers[$key]=substr($header,strlen($key)+2);
                          }
                      unset($key);
                      } else {
                          $headers[] = $header;
                      }
                  }
              }
              return $headers;

          } else {
              return false;
          }
     }
?>

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值