一个用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 相关文章推荐
基于mysql的论坛(2)
Oct 09 PHP
PHP写的获取各搜索蜘蛛爬行记录代码
Aug 21 PHP
php中0,null,empty,空,false,字符串关系的详细介绍
Jun 20 PHP
PHP函数之日期时间函数date()使用详解
Sep 09 PHP
函数中使用require_once问题深入探讨 优雅的配置文件定义方法推荐
Jul 02 PHP
php中socket的用法详解
Oct 24 PHP
PIGCMS 如何关闭聊天机器人
Feb 12 PHP
php登录超时检测功能实例详解
Mar 21 PHP
浅谈ThinkPHP中initialize和construct的区别
Apr 01 PHP
php 比较获取两个数组相同和不同元素的例子(交集和差集)
Oct 18 PHP
PHP使用PDO实现mysql防注入功能详解
Dec 20 PHP
php框架CI(codeigniter)自动加载与自主创建对象操作实例分析
Jun 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
收音机怀古---春雷3P7图片欣赏
2021/03/02 无线电
php生成随机颜色的方法
2014/11/13 PHP
php中解析带中文字符的url函数分享
2015/01/20 PHP
帝国cms常用标签汇总
2015/07/06 PHP
Javascript客户端脚本的设计和应用
2006/08/21 Javascript
网上抓的一个特效
2007/05/11 Javascript
跟我一起学写jQuery插件开发方法(附完整实例及下载)
2010/04/01 Javascript
文本框input聚焦失焦样式实现代码
2012/10/12 Javascript
javascript中window.event事件用法详解
2012/12/11 Javascript
ExtJS下书写动态生成的xml(兼容火狐)
2013/04/02 Javascript
js判断当页面无法回退时关闭网页否则就history.go(-1)
2014/08/07 Javascript
借助FileReader实现将文件编码为Base64后通过AJAX上传
2015/12/24 Javascript
Jquery uploadify上传插件使用详解
2016/01/13 Javascript
JavaScript基于对象去除数组重复项的方法
2016/10/09 Javascript
angular+bootstrap的双向数据绑定实例
2017/03/03 Javascript
jQuery对底部导航进行跳转并高亮显示的实例代码
2019/04/23 jQuery
layer 刷新某个页面的实现方法
2019/09/05 Javascript
JavaScript中的Proxy对象
2020/11/27 Javascript
[46:25]DOTA2上海特级锦标赛主赛事日 - 4 败者组第五轮 MVP.Phx VS EG第二局
2016/03/05 DOTA
分析Python编程时利用wxPython来支持多线程的方法
2015/04/07 Python
python 实现删除文件或文件夹实例详解
2016/12/04 Python
python中学习K-Means和图片压缩
2017/11/20 Python
Python3 操作符重载方法示例
2017/11/23 Python
python实现媒体播放器功能
2018/02/11 Python
Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例
2018/05/16 Python
python logging重复记录日志问题的解决方法
2018/07/12 Python
使用python serial 获取所有的串口名称的实例
2019/07/02 Python
中专自荐信
2013/10/13 职场文书
酒吧员工的岗位职责
2013/11/26 职场文书
环境卫生标语
2014/06/09 职场文书
2014院党委领导班子对照检查材料思想汇报
2014/09/24 职场文书
音乐教师个人总结
2015/02/06 职场文书
工作年限证明模板
2015/06/15 职场文书
中国梦宣传标语口号
2015/12/26 职场文书
Python+uiautomator2实现自动刷抖音视频功能
2021/04/29 Python
MySQL数据库查询进阶之多表查询详解
2022/04/08 MySQL