解析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
PHP错误抑制符(@)导致引用传参失败Bug的分析
May 02 PHP
在windows服务器开启php的gd库phpinfo中未发现
Jan 13 PHP
php常用Stream函数集介绍
Jun 24 PHP
php number_format() 函数通过千位分组来格式化数字的实现代码
Aug 06 PHP
测试php连接mysql是否成功的代码分享
Jan 24 PHP
php统计文章排行示例
Mar 04 PHP
深入解析PHP的Yii框架中的event事件机制
Mar 17 PHP
PHP封装函数实现生成随机的字符串验证码
Jan 24 PHP
ThinkPHP框架分布式数据库连接方法详解
Mar 14 PHP
Laravel框架模型的创建及模型对数据操作示例
May 07 PHP
通过实例解析PHP数据类型转换方法
Jul 11 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
异步加载技术实现当滚动条到最底部的瀑布流效果
2014/09/16 PHP
php使用PDO执行SQL语句的方法分析
2017/02/16 PHP
PHP查询分页的实现代码
2017/06/09 PHP
laravel邮件发送的实现代码示例
2020/01/31 PHP
基于jQuery的淡入淡出可自动切换的幻灯插件打包下载
2010/09/15 Javascript
借助script进行Http跨域请求:JSONP实现原理及代码
2013/03/19 Javascript
div当滚动到页面顶部的时候固定在顶部实例代码
2013/05/27 Javascript
Javascript中string转date示例代码
2013/11/01 Javascript
jQuery向后台传入json格式数据的方法
2015/02/13 Javascript
JavaScript新增样式规则(推荐)
2016/07/19 Javascript
详解vue-validator(vue验证器)
2017/01/16 Javascript
100行代码理解和分析vue2.0响应式架构
2017/03/09 Javascript
Easyui Datagrid自定义按钮列(最后面的操作列)
2017/07/13 Javascript
vue拖拽组件使用方法详解
2018/12/01 Javascript
微信小程序获取用户openid的实现
2018/12/24 Javascript
vuex存储复杂参数(如对象数组等)刷新数据丢失的解决方法
2019/11/05 Javascript
vue实现淘宝购物车功能
2020/04/20 Javascript
React实现全选功能
2020/08/25 Javascript
微信小程序自定义yPicker组件实现省市区三级联动功能
2020/10/29 Javascript
微信小程序自定义tabBar的踩坑实践记录
2020/11/06 Javascript
python根据出生日期返回年龄的方法
2015/03/26 Python
使用Python脚本将Bing的每日图片作为桌面的教程
2015/05/04 Python
Python 爬虫爬取指定博客的所有文章
2016/02/17 Python
Python中常见的异常总结
2018/02/20 Python
numpy中实现ndarray数组返回符合特定条件的索引方法
2018/04/17 Python
python从list列表中选出一个数和其对应的坐标方法
2019/07/20 Python
python爬虫beautifulsoup解析html方法
2020/12/07 Python
详解HTML5 data-* 自定义属性
2018/01/24 HTML / CSS
尼克松手表官网:Nixon手表
2019/03/17 全球购物
几道Web/Ajax的面试题
2016/11/05 面试题
《美丽的彩虹》教学反思
2014/02/25 职场文书
安全目标管理责任书
2014/07/25 职场文书
韩语专业职业生涯规划范文:成功之路就在我们脚下
2014/09/11 职场文书
入队仪式主持词
2015/07/04 职场文书
CSS完成视差滚动效果
2021/04/27 HTML / CSS
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
2022/04/12 MySQL