一个用php实现的获取URL信息的类


Posted in PHP onJanuary 02, 2007

获取URL信息的类

使用这个类,你能获得URL的如下信息:

- Host 
- Path 
- Statuscode (eg. 404,200, ...) 
- HTTP Version 
- Server 
- Content Type 
- Date 
- The whole header string of the URL

<? 
/** 
* Class for getting information about URL's 
* @author    Sven Wagener <[email]sven.wagener@intertribe.de[/email]> 
* @copyright Intertribe limited 
* @PHP中文社区收集整理 [url]www.phpNet.cn[/url] 
* @include          Funktion:_include_ 
*/ 
class url{   var $url=""; 
  var $url_host; 
  var $url_path; 
  var $file=""; 
  var $code=""; 
  var $code_desc=""; 
  var $http_version=""; // Variable for HTTP version 
  var $header_stream; 
  var $header_array; 
  var $timeout="1"; 
  /** 
  * Constructor of class url 
  * @param string        $url the complete url 
  * @desc Constructor of class url 
  */ 
  function url($url){ 
    $this->url=$url; 
    $url_array=parse_url($this->url); 
    $this->url_host=$url_array['host']; 
    $this->url_path=$url_array['path']; 
    if($this->url_path==""){ 
            $this->url_path="/"; 
    } 
    $this->refresh_headerinfo(); 
  } 
  /** 
  * Returns the whole url 
  * @return string $url the whole url 
  * @desc Returns the whole url 
  */ 
  function get_url(){ 
          return $this->url; 
  } 
  /** 
  * Returns the host of the url 
  * @return string $url_host the host of the url 
  * @desc Returns the host of the url 
  */ 
  function get_url_host(){ 
    return $this->url_host; 
  } 
  /** 
  * Returns the path of the url 
  * @return string $url_path the path of the url 
  * @desc Returns the path of the url 
  */ 
  function get_url_path(){ 
    return $this->url_path; 
  } 
  /** 
  * Returns the status code of the url 
  * @return string $status_code the status code 
  * @desc Returns the status code of the url 
  */ 
  function get_statuscode(){ 
    return $this->code; 
  } 
  /** 
  * Returns the status code description of the url 
  * @return string $status_code_desc the status code description 
  * @desc Returns the status code description of the url 
  */ 
  function get_statuscode_desc(){ 
    return $this->code_desc; 
  } 
  /** 
  * Returns the http version of the url by the returned headers of the server 
  * @return string $http_version the http version 
  * @desc Returns the http version of the url by the returned headers of the server 
  */ 
  function get_info_http_version(){ 
    return $this->http_version; 
  } 
  /** 
  * Returns the server type of the url's host by the returned headers of the server 
  * @return string header_array['Server'] the server type 
  * @desc Returns the server type of the url's host by the returned headers of the server 
  */ 
  function get_info_server(){ 
    return $this->header_array['Server']; 
  } 
  /** 
  * Returns the date of the url's host by the returned headers of the server 
  * @return string $header_array['Date'] the date 
  * @desc Returns the date of the url's host by the returned headers of the server 
  */ 
  function get_info_date(){ 
    return $this->header_array['Date']; 
  } 
  /* 
  function get_info_content_length(){ 
    return $this->header_array['Content-Length']; 
  } 
  */ 
  /** 
  * Returns the content type by the returned headers of the server 
  * @return string header_array['Content-Type'] the content type 
  * @desc Returns the content type by the returned headers of the server 
  */ 
  function get_info_content_type(){ 
    return $this->header_array['Content-Type']; 
  } 
  /** 
  * Returns the content of the url without the headers 
  * @return string $content the content 
  * @desc Returns the content of the url without the headers 
  */ 
  function get_content(){ 
    // Get a web page into a string 
    $string = implode ('', file ($this->url)); 
    return $string; 
  } 
  /** 
  * Returns the whole header of url without content 
  * @return string $header the header 
  * @desc Returns the whole header of url without content 
  */ 
  function get_header_stream(){ 
    return $this->header_stream; 
  } 
  /** 
  * Returns the whole headers of the url in an array 
  * @return array $header_array the headers in an array 
  * @desc Returns the whole headers of the url in an array 
  */ 
  function get_headers(){ 
    return $this->header_array; 
  } 
  /** 
  * Refreshes the header information 
  * @desc Refreshes the header information 
  */ 
  function refresh_headerinfo(){ 
    // Open socket for connection via port 80 to put headers 
    $fp = fsockopen ($this->url_host, 80, $errno, $errstr, 30); 
    if (!$fp) { 
      // echo "$errstr ($errno)"; 
      if($errno==0){ 
              $errstr="Server Not Found"; 
      } 
      $this->code=$errno; 
      $this->code_desc=$errstr; 
    } else { 
      $put_string="GET ".$this->url_path." HTTP/1.0rnHost: ".$this->url_host."rnrn"; 
      fputs ($fp, $put_string); 
      @socket_set_timeout($fp,$this->timeout); 
      $stream=""; 
      $this->header_array=""; 
      $header_end=false; 
      // Getting header string and creating header array 
      $i=0; 
      while (!feof($fp) && !$header_end) { 
        $line=fgets($fp,128); 
        if(strlen($line)==2){ 
          $header_end=true; 
        }else{ 
          if($i==0){ 
            $line1=$line; 
          } 
          $stream.=$line; 
          $splitted_line=split(":",$line); 
          $this->header_array[$splitted_line[0]]=$splitted_line[1]; 
          $i++; 
        } 
      } 
      fclose ($fp); 
      $this->header_stream=$stream; 
      $splitted_stream=split(" ",$line1); 
      // Getting status code and description of the URL 
      $this->code=$splitted_stream[1]; 
      $this->code_desc=$splitted_stream[2]; 
      if(count($splitted_stream)>3){ 
        for($i=3;$i<count($splitted_stream);$i++){ 
          $this->code_desc.=" ".$splitted_stream[$i]; 
        } 
      } 
      // Cleaning up for n and r 
      $this->code_desc=preg_replace("[\n]","",$this->code_desc); 
      $this->code_desc=preg_replace("[\r]","",$this->code_desc); 
      // Getting Http Version 
      $http_array=split("/",$splitted_stream[0]); 
      $this->http_version=$http_array[1]; 
      } 
  } 
  /** 
  * Sets the timeout for getting header data from server 
  * @param int $seconds time for timeout in seconds 
  * @desc Sets the timeout for getting header data from server 
  */ 
  function set_timeout($seconds){ 
    $this->timeout=$seconds; 
  } 
} 
?>

<?php  
include("url.class.php"); 
$url=new url("[url]http://www.phpNet.cn/[/url]"); echo $url->get_header_stream(); 
$headers=$url->get_headers(); 
echo $headers['Server']; 
echo $url->get_content(); 
echo "URL: <b>".$url->get_url()."</b><br>n"; 
echo "URL Host: ".$url->get_url_host()."<br>n"; 
echo "URL Path: ".$url->get_url_path()."<br>n<br>n"; 
echo "Statuscode: ".$url->get_statuscode()."<br>n"; 
echo "Statuscode description: ".$url->get_statuscode_desc()."<br>n"; 
echo "HTTP Version: ".$url->get_info_http_version()."<br>n"; 
echo "Server: ".$url->get_info_server()."<br>n"; 
echo "Content Type: ".$url->get_info_content_type()."<br>n"; 
echo "Date: ".$url->get_info_date()."<br>n<br>n"; 
echo "WHOLE HEADERS:<br>n"; 
echo $url->get_header_stream(); 
?>
PHP 相关文章推荐
输出控制类
Oct 09 PHP
php截取utf-8中文字符串乱码的解决方法
Mar 29 PHP
php中static静态变量的使用方法详解
Jun 04 PHP
使用php判断服务器是否支持Gzip压缩功能
Sep 24 PHP
PHP使用CURL_MULTI实现多线程采集的例子
Jul 29 PHP
PHP中常用的字符串格式化函数总结
Nov 19 PHP
yii实现CheckBox复选框在同一行显示的方法
Dec 03 PHP
在SAE上搭建最新wordpress的方法
Dec 21 PHP
CentOS下PHP安装Oracle扩展
Feb 15 PHP
php跨服务器访问方法小结
May 12 PHP
各种快递查询--Api接口
Apr 26 PHP
php实现获取近几日、月时间示例
Jul 06 PHP
PHP 和 MySQL 开发的 8 个技巧
Jan 02 #PHP
Smarty结合Ajax实现无刷新留言本实例
Jan 02 #PHP
Ajax PHP分页演示
Jan 02 #PHP
windows下PHP APACHE MYSQ完整配置
Jan 02 #PHP
PHP Ajax实现页面无刷新发表评论
Jan 02 #PHP
PHP+AJAX实现无刷新注册(带用户名实时检测)
Jan 02 #PHP
新手学PHP之数据库操作详解及乱码解决!
Jan 02 #PHP
You might like
使用PHPMYADMIN操作mysql数据库添加新用户和数据库的方法
2010/04/02 PHP
PHP判断函数是否被定义的方法
2019/06/21 PHP
添加到收藏夹代码(兼容几乎所有的浏览器)
2007/01/09 Javascript
Jquery ajaxsubmit上传图片实现代码
2010/11/04 Javascript
Js基础学习资料
2010/11/23 Javascript
node.js使用npm 安装插件时提示install Error: ENOENT报错的解决方法
2014/11/20 Javascript
Javascript基础教程之argument 详解
2015/01/18 Javascript
JS实现的仿QQ空间图片弹出效果代码
2016/02/23 Javascript
javascript基础知识
2016/06/07 Javascript
AngularJS基础 ng-include 指令简单示例
2016/08/01 Javascript
jQuery生成假加载动画效果
2016/12/01 Javascript
Vue监听数组变化源码解析
2017/03/09 Javascript
js微信分享实现代码
2020/10/11 Javascript
React Native中的RefreshContorl下拉刷新使用
2017/10/09 Javascript
ReactNative实现Toast的示例
2017/12/31 Javascript
详解如何在webpack中做预渲染降低首屏空白时间
2018/08/22 Javascript
vue-路由精讲 二级路由和三级路由的作用
2020/08/06 Javascript
python 按不同维度求和,最值,均值的实例
2018/06/28 Python
Django实战之用户认证(用户登录与注销)
2018/07/16 Python
利用python循环创建多个文件的方法
2018/10/25 Python
python保存二维数组到txt文件中的方法
2018/11/15 Python
Python3匿名函数lambda介绍与使用示例
2019/05/18 Python
Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析
2020/03/23 Python
canvas绘制图片drawImage使用方法
2020/09/15 HTML / CSS
澳大利亚冲浪和时尚服装网上购物:SurfStitch
2017/07/29 全球购物
澳大利亚排名第一的狂热牛仔品牌:ONETEASPOON
2018/11/20 全球购物
北京-环亚运商测试题.net程序员初步测试题
2013/05/28 面试题
通用C#笔试题附答案
2016/11/26 面试题
创业计划书——互联网商机
2014/01/12 职场文书
领导干部作风建设工作总结
2014/10/23 职场文书
青岛海底世界导游词
2015/02/11 职场文书
创卫工作总结2015
2015/04/22 职场文书
2019同学聚会主持词
2019/05/06 职场文书
解读Vue组件注册方式
2021/05/15 Vue.js
Java 超详细讲解十大排序算法面试无忧
2022/04/08 Java/Android
使用Redis实现分布式锁的方法
2022/06/16 Redis