解析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 相关文章推荐
层叠菜单的动态生成
Oct 09 PHP
php数组函数序列之array_splice() - 在数组任意位置插入元素
Nov 07 PHP
php中一个完整表单处理实现代码
Nov 10 PHP
解析PHP对现有搜索引擎的调用
Jun 25 PHP
php获取url参数方法总结
Nov 13 PHP
php定义参数数量可变的函数用法实例
Mar 16 PHP
php简单实现查询数据库返回json数据
Apr 16 PHP
YII Framework框架教程之缓存用法详解
Mar 14 PHP
PHP中overload与override的区别
Feb 13 PHP
PHP简单实现防止SQL注入的方法
Mar 13 PHP
PHP实现的mysql读写分离操作示例
May 22 PHP
Yii框架操作cookie与session的方法实例详解
Sep 04 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
解决File size limit exceeded 错误的方法
2013/06/14 PHP
php多线程并发实现方法
2016/09/30 PHP
jquery批量控制form禁用的代码
2013/08/06 Javascript
在JS数组特定索引处指定位置插入元素
2014/07/27 Javascript
Javascript基础教程之JavaScript语法
2015/01/18 Javascript
理解 JavaScript Scoping &amp; Hoisting(二)
2015/11/18 Javascript
非常酷炫的Bootstrap图片轮播动画
2016/05/27 Javascript
JS读取XML文件数据并以table形式显示数据的方法(兼容IE与火狐)
2016/06/02 Javascript
Jquery通过ajax请求NodeJS返回json数据实例
2016/11/08 NodeJs
JavaScript之Map和Set_动力节点Java学院整理
2017/06/29 Javascript
python爬虫教程之爬取百度贴吧并下载的示例
2014/03/07 Python
python使用TensorFlow进行图像处理的方法
2018/02/28 Python
python 时间信息“2018-02-04 18:23:35“ 解析成字典形式的结果代码详解
2018/04/19 Python
python 移除字符串尾部的数字方法
2018/07/17 Python
对python 操作solr索引数据的实例详解
2018/12/07 Python
浅谈PyQt5 的帮助文档查找方法,可以查看每个类的方法
2019/06/25 Python
python 求某条线上特定x值或y值的点坐标方法
2019/07/09 Python
简单瞅瞅Python vars()内置函数的实现
2019/09/27 Python
python提取xml里面的链接源码详解
2019/10/15 Python
浅谈Python type的使用
2019/11/19 Python
python使用html2text库实现从HTML转markdown的方法详解
2020/02/21 Python
Python如何使用内置库matplotlib绘制折线图
2020/02/24 Python
Python打印特殊符号及对应编码解析
2020/05/07 Python
Python自动登录QQ的实现示例
2020/08/28 Python
python 无损批量压缩图片(支持保留图片信息)的示例
2020/09/22 Python
英国广泛的照明产品网站:Lights4living
2018/01/28 全球购物
监理员的岗位职责
2013/11/13 职场文书
药品采购员岗位职责
2014/02/08 职场文书
《桂林山水》教学反思
2014/02/08 职场文书
高三学生评语大全
2014/04/25 职场文书
学前班评语大全
2014/05/04 职场文书
2015年财务部工作总结
2015/04/10 职场文书
2015年六一儿童节活动方案
2015/05/05 职场文书
英语专业毕业论文答辩开场白
2015/05/27 职场文书
失恋33天观后感
2015/06/11 职场文书
办公室主任岗位竞聘书
2015/09/15 职场文书