解析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 相关文章推荐
php面向对象全攻略 (六)__set() __get() __isset() __unset()的用法
Sep 30 PHP
关于js和php对url编码的处理方法
Mar 04 PHP
php+mysqli使用面向对象方式查询数据库实例
Jan 29 PHP
PHP设置进度条的方法
Jul 08 PHP
Thinkphp+smarty+uploadify实现无刷新上传
Jul 30 PHP
php基础教程
Aug 26 PHP
php版微信自动登录并获取昵称的方法
Sep 23 PHP
PHP上传图片、删除图片简单实例
Nov 12 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
Nov 29 PHP
laravel异步监控定时调度器实例详解
Jun 21 PHP
laravel框架分组控制器和分组路由实现方法示例
Jan 25 PHP
thinkphp诸多限制条件下如何getshell详解
Dec 09 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
腾讯CMEM的PHP扩展编译安装方法
2015/09/25 PHP
php 数组处理函数extract详解及实例代码
2016/11/23 PHP
Yii框架使用魔术方法实现跨文件调用功能示例
2017/05/20 PHP
一款JavaScript压缩工具:X2JSCompactor
2007/06/13 Javascript
JavaScript 对象模型 执行模型
2009/12/06 Javascript
JQuery最佳实践之精妙的自定义事件
2010/08/11 Javascript
详解Angular2中的编程对象Observable
2016/09/17 Javascript
老生常谈jquery中detach()和remove()的区别
2017/03/02 Javascript
原JS实现banner图的常用功能
2017/06/12 Javascript
详解vue2.0 使用动态组件实现 Tab 标签页切换效果(vue-cli)
2017/08/30 Javascript
浅谈在fetch方法中添加header后遇到的预检请求问题
2017/08/31 Javascript
Vue2仿淘宝实现省市区三级联动
2020/04/15 Javascript
JavaScript常用截取字符串的三种方式用法区别实例解析
2018/05/15 Javascript
Vue项目History模式404问题解决方法
2018/10/31 Javascript
浅谈react-router@4.0 使用方法和源码分析
2019/06/04 Javascript
jquery 时间戳转日期过程详解
2019/10/12 jQuery
layUI的验证码功能及校验实例
2019/10/25 Javascript
[39:52]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第一场
2018/04/04 DOTA
Python struct模块解析
2014/06/12 Python
python实现根据图标提取分类应用程序实例
2014/09/28 Python
Python采用Django制作简易的知乎日报API
2016/08/03 Python
Python中Selenium模拟JQuery滑动解锁实例
2017/07/26 Python
python Flask 装饰器顺序问题解决
2018/08/08 Python
centos6.8安装python3.7无法import _ssl的解决方法
2018/09/17 Python
python画图把时间作为横坐标的方法
2019/07/07 Python
TensorFlow实现从txt文件读取数据
2020/02/05 Python
飞利浦美国官网:Philips美国
2020/02/28 全球购物
如何将一个描述日期或日期/时间的字符串转换为一个Date对象
2015/10/13 面试题
大型活动策划方案
2014/01/12 职场文书
开学季活动策划方案
2014/02/28 职场文书
运动会跳远广播稿
2015/08/19 职场文书
学习经验交流会策划书
2015/11/02 职场文书
MySQL里面的子查询的基本使用
2021/08/02 MySQL
python中出现invalid syntax报错的几种原因分析
2022/02/12 Python
css filter和getUserMedia的联合使用
2022/02/24 HTML / CSS
MySQL控制流函数(-if ,elseif,else,case...when)
2022/07/07 MySQL