解析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_time_limit(0)长连接的实现分析
Mar 02 PHP
rrmdir php中递归删除目录及目录下的文件
May 15 PHP
关于查看MSSQL 数据库 用户每个表 占用的空间大小
Jun 21 PHP
解析php框架codeigniter中如何使用框架的session
Jun 24 PHP
PHP 正则表达式常用函数
Aug 17 PHP
ThinkPHP在Cli模式下使用模板引擎的方法
Sep 25 PHP
PHP异常处理Exception类
Dec 11 PHP
详解js异步文件加载器
Jan 24 PHP
Symfony2实现在doctrine中内置数据的方法
Feb 05 PHP
php调用云片网接口发送短信的实现方法
Oct 25 PHP
PHP中str_split()函数的用法讲解
Apr 11 PHP
PHP如何通过带尾指针的链表实现'队列'
Oct 22 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 curl常见错误:SSL错误、bool(false)
2011/12/28 PHP
php实现改变图片直接打开为下载的方法
2015/04/14 PHP
php 生成Tab键或逗号分隔的CSV
2016/09/24 PHP
详解PHP中foreach的用法和实例
2016/10/25 PHP
JavaScript全局函数使用简单说明
2011/03/11 Javascript
当json键为数字时的取值方法解析
2013/11/15 Javascript
DOM基础教程之事件对象
2015/01/20 Javascript
JavaScript学习笔记之内置对象
2015/01/22 Javascript
js实现鼠标移到链接文字弹出一个提示层的方法
2015/05/11 Javascript
JavaScript中length属性的使用方法
2015/06/05 Javascript
在Node.js应用中读写Redis数据库的简单方法
2015/06/30 Javascript
asp.net+jquery.form实现图片异步上传的方法(附jquery.form.js下载)
2016/05/05 Javascript
基于jQuery实现的Ajax 验证用户名唯一性实例代码
2017/06/28 jQuery
深入解析nodejs HTTP服务
2017/07/25 NodeJs
Bootstrap Fileinput 4.4.7文件上传实例详解
2018/07/25 Javascript
vue2.0 + ele的循环表单及验证字段方法
2018/09/18 Javascript
JavaScript eval()函数定义及使用方法详解
2020/07/07 Javascript
[01:55]《走出家门看比赛》——DOTA2 2015国际邀请赛同城线下观战
2015/07/18 DOTA
python 获取本机ip地址的两个方法
2013/02/25 Python
Python常用列表数据结构小结
2014/08/06 Python
基于Python的身份证号码自动生成程序
2014/08/15 Python
Python实现字典的key和values的交换
2015/08/04 Python
PYTHON基础-时间日期处理小结
2018/05/05 Python
使用Python处理BAM的方法
2018/09/28 Python
python中利用numpy.array()实现俩个数值列表的对应相加方法
2019/08/26 Python
python使用多线程编写tcp客户端程序
2019/09/02 Python
Python3.7基于hashlib和Crypto实现加签验签功能(实例代码)
2019/12/04 Python
纯CSS实现右侧底部悬浮效果(悬浮QQ、微信、微博、邮箱等联系方式)
2015/04/24 HTML / CSS
html5 worker 实例(二) 图片变换效果
2013/06/24 HTML / CSS
Agoda台湾官网:国内外订房2折起
2018/03/20 全球购物
高尔夫球鞋、服装、手套和装备:FootJoy
2018/12/15 全球购物
创业计划书怎样才能打动风投
2014/01/01 职场文书
校本教研工作方案
2014/01/14 职场文书
学习三严三实对照检查材料思想汇报
2014/09/22 职场文书
2016新教师岗前培训心得体会
2016/01/08 职场文书
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
2021/05/25 Vue.js