解析php 版获取重定向后的地址(代码)

 更新时间:2013年06月26日 11:54:49   作者:  
本篇文章是对php版获取重定向后的地址实现代码进行了详细的分析介绍,需要的朋友参考下
复制代码 代码如下:

//取重定向的地址
 class RedirectUrl{
     //地址
     var $url;
     //初始化地址
     function RedirectUrl($url){
         $this->url = $url;
     }
     /**
      * get_redirect_url()
      * 取重定向的地址
      *
      * @param string $url
      * @return string
      */
     private function get_redirect_url($url){
         $redirect_url = null;

         $url_parts = @parse_url($url);
         if (!$url_parts) return false;
         if (!isset($url_parts['host'])) return false; //can't process relative URLs
         if (!isset($url_parts['path'])) $url_parts['path'] = '/';

         $sock = fsockopen($url_parts['host'], (isset($url_parts['port']) ? (int)$url_parts['port'] : 80), $errno, $errstr, 30);
         if (!$sock) return false;

         $request = "HEAD " . $url_parts['path'] . (isset($url_parts['query']) ?'?'.$url_parts['query'] : '') . " HTTP/1.1\r\n";
         $request .= 'Host: ' . $url_parts['host'] . "\r\n";
         $request .= "Connection: Close\r\n\r\n";
         fwrite($sock, $request);
         $response = '';
         while(!feof($sock)) $response .= fread($sock, 8192);
         fclose($sock);

         if (preg_match('/^Location: (.+?)$/m', $response, $matches)){
             return trim($matches[1]);
         } else {
             return false;
         }
     }

     /**
      * get_all_redirects()
      * 取所有重定向地址
      *
      * @param string $url
      * @return array
      */
     private function get_all_redirects($url){
         $redirects = array();
         while ($newurl = $this->get_redirect_url($url)){
             if (in_array($newurl, $redirects)){
                 break;
             }
             $redirects[] = $newurl;
             $url = $newurl;
         }
         return $redirects;
     }

     /**
      * get_final_url()
      * 取实际地址
      *
      * @param string $url
      * @return string
      */
     function get_final_url(){
         $redirects = $this->get_all_redirects($this->url);

         if (count($redirects)>0){
             return array_pop($redirects);
         } else {
             return $this->url;
         }
     }
 }

 /**
  * get_show_pic
  * 取最终要显示的图片地址
  *
  * @param string $url
  * @return  string
  */
 function get_show_pic($url,$noimg ='noimg.gif',$newimg="http://special.ku6img.com/projects/2010/d-color/images/slt-1.jpg"){
     $obj = new RedirectUrl($url);

     $realurl = $obj->get_final_url();

     if(strpos($realurl,$noimg)>0){
         return $newimg;
     }
     return $url;
 }
 //参考
 echo "<img src='".get_show_pic("http://i2.ku6img.com/encode/picpath/2010/12/9/14/1294948410019/5.jpg")."'/>";
 ?>

相关文章

  • php获取今日开始时间和结束时间的方法

    php获取今日开始时间和结束时间的方法

    本篇文章实例讲述了php获取今日开始时间和结束时间的方法,具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • PHP源代码数组统计count分析

    PHP源代码数组统计count分析

    偶然在百度知道中看到有个同学问起count及strlen的效率问题,好吧这个问题我当初没理解透彻,认为其不属两个不一样的东西不可比较,后来看了楼主的回复才反应过来,所以自己也去找了下源码查看下。现在总结下查看到的结果并记录之。
    2011-08-08
  • 实例讲解如何在PHP的Yii框架中进行错误和异常处理

    实例讲解如何在PHP的Yii框架中进行错误和异常处理

    这篇文章主要介绍了如何在PHP的Yii框架中进行错误和异常处理的实例,重点讲解了使用错误处理器的方法,需要的朋友可以参考下
    2016-03-03
  • PHP使用GD库输出汉字的方法【测试可用】

    PHP使用GD库输出汉字的方法【测试可用】

    这篇文章主要介绍了PHP使用GD库输出汉字的方法,结合实例形式较为详细的分析了php使用GD库进行图形绘制与汉字输出的相关操作技巧,需要的朋友可以参考下
    2016-11-11
  • JS实现php的伪分页

    JS实现php的伪分页

    假如某一个页面的数据很多,不方便全都显示出来,而且假设里面有个播放器,不希望在翻页的时候播放器会终止的话,就可以采用这个方法尽管可以用Ajax,但是在数据比较少的情况下,这个方法更有优势
    2008-05-05
  • 详解PHP中的状态模式编程

    详解PHP中的状态模式编程

    这篇文章主要介绍了详解PHP中的状态模式编程,有利于团队协作编程,需要的朋友可以参考下
    2015-08-08
  • php面向对象程序设计中self与static的区别分析

    php面向对象程序设计中self与static的区别分析

    这篇文章主要介绍了php面向对象程序设计中self与static的区别,结合实例形式分析了php面向对象程序设计中self与static的功能、以及在继承过程中实现多态的区别,并总结了static静态延迟绑定的原理,需要的朋友可以参考下
    2019-05-05
  • php中strtotime函数性能分析

    php中strtotime函数性能分析

    strtotime()是php中的时间函数;其功能是:将任何字符串形式的日期,时间转换成对应的Unix 时间戳。今天我们是通过具体的实例来详细分析下strtotime()函数的性能问题
    2016-11-11
  • php5.2.0内存管理改进

    php5.2.0内存管理改进

    php5.2.0内存管理改进...
    2007-01-01
  • php加速器eAccelerator的配置参数、API详解

    php加速器eAccelerator的配置参数、API详解

    eAccelerator是一个开源PHP加速器,优化程序,编码器和动态内容缓存。它通过在编译状态下对它们进行缓存以提高PHP脚本的性能,所以那些 系统开销在编译时几乎可以被消除
    2014-05-05

最新评论