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


Posted in PHP onJune 26, 2013
//取重定向的地址 
 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 相关文章推荐
多重?l件?合查?(一)
Oct 09 PHP
dedecms 批量提取第一张图片最为缩略图的代码(文章+软件)
Oct 29 PHP
php 过滤器实现代码
Aug 09 PHP
解析php DOMElement 操作xml 文档的实现代码
May 10 PHP
利用PHP实现图片等比例放大和缩小的方法详解
Jun 06 PHP
解析PHP汉字转换拼音的类
Jun 18 PHP
开源php中文分词系统SCWS安装和使用实例
Apr 11 PHP
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
Jun 19 PHP
zend framework中使用memcache的方法
Mar 04 PHP
php bootstrap实现简单登录
Mar 08 PHP
Yii2中DropDownList简单用法示例
Jul 18 PHP
PHP基于堆栈实现的高级计算器功能示例
Sep 15 PHP
php连接函数implode与分割explode的深入解析
Jun 26 #PHP
解析PHP正则提取或替换img标记属性
Jun 26 #PHP
php 在windows下配置虚拟目录的方法介绍
Jun 26 #PHP
关于PHP自动判断字符集并转码的详解
Jun 26 #PHP
安装apache2.2.22配置php5.4(具体操作步骤)
Jun 26 #PHP
php 批量生成html,txt文件的实现代码
Jun 26 #PHP
php 去除html标记--strip_tags与htmlspecialchars的区别详解
Jun 26 #PHP
You might like
PHP学习之PHP表达式
2006/10/09 PHP
如何使用PHP中的字符串函数
2006/11/24 PHP
php中文字符截取防乱码
2008/03/28 PHP
PHP判断是否为空的几个函数对比
2015/04/21 PHP
php+croppic.js实现剪切上传图片功能
2018/08/14 PHP
JavaScript写的一个DIV 弹出网页对话框
2009/08/14 Javascript
js event事件的传递与冒泡处理
2009/12/06 Javascript
jQuery 选择器、DOM操作、事件、动画
2010/11/25 Javascript
Function.prototype.call.apply结合用法分析示例
2013/07/03 Javascript
js实现点击文本框显示日期选择器特效代码分享
2020/05/21 Javascript
javascript 内置对象及常见API详细介绍
2016/11/01 Javascript
梳理一下vue中的生命周期
2020/12/30 Vue.js
[05:49]2014DOTA2TI4正赛第二日综述 昔日冠军纷纷落马 VG LGD占尽先机
2014/07/20 DOTA
跟老齐学Python之折腾一下目录
2014/10/24 Python
python实现将元祖转换成数组的方法
2015/05/04 Python
Python的dict字典结构操作方法学习笔记
2016/05/07 Python
Python的面向对象编程方式学习笔记
2016/07/12 Python
Python实现将doc转化pdf格式文档的方法
2018/01/19 Python
Python实现微信自动好友验证,自动回复,发送群聊链接方法
2019/02/21 Python
python中break、continue 、exit() 、pass终止循环的区别详解
2019/07/08 Python
Python 动态变量名定义与调用方法
2020/02/09 Python
Python定时器线程池原理详解
2020/02/26 Python
解决Python Matplotlib绘图数据点位置错乱问题
2020/05/16 Python
python 使用递归的方式实现语义图片分割功能
2020/07/16 Python
python中append函数用法讲解
2020/12/11 Python
python requests库的使用
2021/01/06 Python
Windows和Linux动态库应用异同
2016/07/28 面试题
网管求职信
2014/03/03 职场文书
护士毕业实习感言
2014/03/05 职场文书
竞聘书怎么写,如何写?
2014/03/31 职场文书
我是一名护士演讲稿
2014/08/28 职场文书
毕业论文答辩开场白
2015/05/27 职场文书
2015暑期社会实践通讯稿
2015/07/18 职场文书
详解缓存穿透击穿雪崩解决方案
2021/05/28 Redis
浅谈自定义校验注解ConstraintValidator
2021/06/30 Java/Android
JavaScript原型链详解
2021/11/07 Javascript