解析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来写记数器(详细介绍)
Oct 09 PHP
生成sessionid和随机密码的例子
Oct 09 PHP
PHP 递归效率分析
Nov 24 PHP
CURL状态码列表(详细)
Jun 27 PHP
php防止伪造数据从地址栏URL提交的方法
Aug 24 PHP
PHP中trim()函数简单使用指南
Apr 16 PHP
Yii 2.0在Grid中格式化时间方法示例
Jun 06 PHP
Yii输入正确验证码却验证失败的解决方法
Jun 06 PHP
php微信开发之谷歌测距
Jun 14 PHP
PHP多个图片压缩成ZIP的方法
Aug 18 PHP
php使用环形链表解决约瑟夫问题完整示例
Aug 07 PHP
通过PHP设置BugFree获取邮箱通知
Apr 25 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调用nginx的mod_zip模块打包ZIP文件
2014/06/11 PHP
php中输出json对象的值(实现方法)
2018/03/07 PHP
PHP date()格式MySQL中插入datetime方法
2019/01/29 PHP
使用jquery读取html5 localstorage的值的方法
2013/01/04 Javascript
JS模板实现方法
2013/04/03 Javascript
javascript获取选中的文本的方法代码
2013/10/30 Javascript
JavaScript+html5 canvas绘制的圆弧荡秋千效果完整实例
2016/01/26 Javascript
JavaScript中点击事件的写法
2016/06/28 Javascript
IE下JS保存图片的简单实例
2016/07/15 Javascript
解析预加载显示图片艺术
2016/12/05 Javascript
JS完成画圆圈的小球
2017/03/07 Javascript
js链表操作(实例讲解)
2017/08/29 Javascript
详解使用vscode+es6写nodejs服务端调试配置
2017/09/21 NodeJs
layui之select的option叠加问题的解决方法
2018/03/08 Javascript
js的各种数据类型判断的介绍
2019/01/19 Javascript
vue2.0+vue-router构建一个简单的列表页的示例代码
2019/02/13 Javascript
精确查找PHP WEBSHELL木马的方法(1)
2011/04/12 Python
python计算圆周长、面积、球体体积并画出圆
2014/04/08 Python
举例讲解Django中数据模型访问外键值的方法
2015/07/21 Python
python3实现爬取淘宝美食代码分享
2018/09/23 Python
python 使用pandas计算累积求和的方法
2019/02/08 Python
anaconda如何查看并管理python环境
2019/07/05 Python
Python3.0 实现决策树算法的流程
2019/08/08 Python
Python任务调度利器之APScheduler详解
2020/04/02 Python
解决pycharm下pyuic工具使用的问题
2020/04/08 Python
CSS3 Flexbox中flex-shrink属性的用法示例介绍
2013/12/30 HTML / CSS
美国基督教约会网站:ChristianCafe.com
2020/02/04 全球购物
Servlet的实例是在生命周期什么时候创建的?配置servlet最重要的是什么?
2012/05/30 面试题
会计电算化专业毕业生推荐信
2013/12/24 职场文书
内衣营销方案
2014/03/15 职场文书
《风娃娃》教学反思
2014/04/19 职场文书
办公室主任竞聘演讲稿
2014/05/15 职场文书
标准毕业生自荐信
2014/06/24 职场文书
2014最新开业庆典策划方案(5篇)
2014/09/15 职场文书
2015小学新教师个人工作总结
2015/10/14 职场文书
导游词之泉州崇武古城
2019/12/20 职场文书