解析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 相关文章推荐
关于shopex同步ucenter的redirect问题,导致script不运行
Apr 10 PHP
yii上传文件或图片实例
Apr 01 PHP
destoon设置自定义搜索的方法
Jun 21 PHP
ThinkPHP框架实现session跨域问题的解决方法
Jul 01 PHP
php使用pack处理二进制文件的方法
Jul 03 PHP
ThinkPHP登录功能的实现方法
Aug 20 PHP
php计算多维数组中所有值总和的方法
Jun 24 PHP
在PHP站点的页面上添加Facebook评论插件的实例教程
Jan 08 PHP
PHP和MySql中32位和64位的整形范围是多少
Feb 18 PHP
CI框架中类的自动加载问题分析
Nov 21 PHP
php实现的redis缓存类定义与使用方法示例
Aug 09 PHP
php libevent 功能与使用方法详解
Mar 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
文章推荐系统(二)
2006/10/09 PHP
php fckeditor 调用的函数
2009/06/21 PHP
11个PHPer必须要了解的编程规范
2014/09/22 PHP
Drupal简体中文语言包安装教程
2014/09/27 PHP
PHP中的print_r 与 var_dump 输出数组
2016/06/13 PHP
js动态创建表格,删除行列的小例子
2013/07/20 Javascript
JS判定是否原生方法
2013/07/22 Javascript
JavaScript:Div层拖动效果实例代码
2013/08/06 Javascript
javascript实现的平方米、亩、公顷单位换算小程序
2014/08/11 Javascript
解决jquery版本冲突的有效方法
2014/09/02 Javascript
jQuery进行组件开发完整实例
2015/12/15 Javascript
基于JavaScript实现定时跳转到指定页面
2016/01/01 Javascript
详解Javacript和AngularJS中的Promises
2016/02/09 Javascript
完善的jquery处理机制
2016/02/21 Javascript
JS前端加密算法示例
2016/12/22 Javascript
jQuery实现可拖动进度条实例代码
2017/06/21 jQuery
详解用node搭建简单的静态资源管理器
2017/08/09 Javascript
nodeJS模块简单用法示例
2018/04/21 NodeJs
JS实现键值对遍历json数组功能示例
2018/05/30 Javascript
Angularjs之ngModel中的值验证绑定方法
2018/09/13 Javascript
jQuery实现聊天对话框
2020/02/08 jQuery
基于VSCode调试网页JavaScript代码过程详解
2020/07/20 Javascript
React实现全选功能
2020/08/25 Javascript
浅谈vue使用axios的回调函数中this不指向vue实例,为undefined
2020/09/21 Javascript
python按修改时间顺序排列文件的实例代码
2019/07/25 Python
详解python中的index函数用法
2019/08/06 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
2020/03/08 Python
python对 MySQL 数据库进行增删改查的脚本
2020/10/22 Python
CSS3 清除浮动的方法示例
2018/06/01 HTML / CSS
html5 桌面提醒:Notifycations应用介绍
2012/11/27 HTML / CSS
英国领先的在线药房:Pharmacy First
2017/09/10 全球购物
New Balance加拿大官方网站:运动鞋和健身服装
2018/11/19 全球购物
特色蛋糕店创业计划书
2014/01/28 职场文书
出生公证委托书
2014/04/03 职场文书
2014年镇党建工作汇报材料
2014/11/02 职场文书
《走遍天下书为侣》教学反思
2016/02/22 职场文书