解析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 相关文章推荐
提示Trying to clone an uncloneable object of class Imagic的解决
Oct 27 PHP
基于PHP生成静态页的实现方法
May 10 PHP
zf框架db类的分页示例分享
Mar 14 PHP
php setcookie函数的参数说明及其用法
Apr 20 PHP
Smarty模板学习笔记之Smarty简介
May 20 PHP
php调用KyotoTycoon简单实例
Apr 02 PHP
PHP防止刷新重复提交页面的示例代码
Nov 11 PHP
PHP合并数组的2种方法小结
Nov 24 PHP
PHP验证码类ValidateCode解析
Jan 07 PHP
PHP进程通信基础之信号量与共享内存通信
Feb 19 PHP
PHPExcel中文帮助手册|PHPExcel使用方法(分享)
Jun 09 PHP
使用PHPUnit进行单元测试并生成代码覆盖率报告的方法
Mar 08 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 文件上传全攻略
2010/04/28 PHP
PHP中用接口、抽象类、普通基类实现“面向接口编程”与“耦合方法”简述
2011/03/23 PHP
PHP保留两位小数并且四舍五入及不四舍五入的方法
2013/09/22 PHP
PHP表单验证内容是否为空的实现代码
2016/11/14 PHP
关于php几种字符串连接的效率比较(详解)
2017/02/22 PHP
不用写JS也能使用EXTJS视频演示
2008/12/29 Javascript
js arguments.callee的应用代码
2009/05/07 Javascript
jquery 操作日期、星期、元素的追加的实现代码
2012/02/07 Javascript
将json对象转换为字符串的方法
2014/02/20 Javascript
Node.js和PHP根据ip获取地理位置的方法
2014/03/14 Javascript
控制文字内容的显示与隐藏示例
2014/06/11 Javascript
使用NodeJs 开发微信公众号(三)微信事件交互实例
2016/03/02 NodeJs
JS实现支持Ajax验证的表单插件
2016/03/24 Javascript
jquery使用on绑定a标签无效 只能用live解决
2016/06/02 Javascript
jQuery实现的模拟弹出窗口功能示例
2016/11/24 Javascript
Javascript面试经典套路reduce函数查重
2017/03/23 Javascript
self.attachevent is not a function的解决方法
2017/04/04 Javascript
微信小程序报错:this.setData is not a function的解决办法
2017/09/27 Javascript
写一个移动端惯性滑动&amp;回弹Vue导航栏组件 ly-tab
2018/03/06 Javascript
详解webpack import()动态加载模块踩坑
2018/07/17 Javascript
微信小程序实现日历效果
2018/12/28 Javascript
JS实现判断数组是否包含某个元素示例
2019/05/24 Javascript
[04:42]2015国际邀请赛CDEC战队晋级之路
2015/08/13 DOTA
python实战之实现excel读取、统计、写入的示例讲解
2018/05/02 Python
Waterford加拿大官方网站:世界著名的水晶杯品牌
2016/11/01 全球购物
Vilebrequin美国官方网上商店:法国豪华泳装品牌
2020/02/22 全球购物
什么是java序列化,如何实现java序列化
2012/11/14 面试题
介绍一下木马病毒的种类
2015/07/26 面试题
大学军训感言400字
2014/03/11 职场文书
党员教师四风问题整改措施思想汇报
2014/10/08 职场文书
买房子个人收入证明
2014/10/12 职场文书
2014年学校禁毒工作总结
2014/12/23 职场文书
2016年度师德标兵先进事迹材料
2016/02/26 职场文书
提取视频中的音频 Python只需要三行代码!
2021/05/10 Python
Java实现简易的分词器功能
2021/06/15 Java/Android
JavaScript中reduce()的用法
2022/05/11 Javascript