解析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基础学习笔记
Mar 18 PHP
MYSQL 小技巧 -- LAST_INSERT_ID
Nov 24 PHP
PHP连接SQLSERVER 注意事项(附dll文件下载)
Jun 28 PHP
php分割合并两个字符串的函数实例
Jun 19 PHP
windows平台中配置nginx+php环境
Dec 06 PHP
PHP中用mysqli面向对象打开连接关闭mysql数据库的方法
Nov 05 PHP
AJAX的使用方法详解
Apr 29 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 PHP
thinkPHP利用ajax异步上传图片并显示、删除的示例
Sep 26 PHP
Laravel 5.5 实现禁用用户注册示例
Oct 24 PHP
tp5框架使用cookie加密算法实现登录功能示例
Feb 10 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
全国FM电台频率大全 - 13 福建省
2020/03/11 无线电
WinXP + Apache +PHP5 + MySQL + phpMyAdmin安装全功略
2006/07/09 PHP
PHP实现下载断点续传的方法
2014/11/12 PHP
php正则匹配html中带class的div并选取其中内容的方法
2015/01/13 PHP
thinkPHP模板中函数的使用方法示例
2016/11/30 PHP
jQuery对象和Javascript对象之间转换的实例代码
2013/03/20 Javascript
window.open打开页面居中显示的示例代码
2013/12/27 Javascript
chrome下img加载对height()的影响示例探讨
2014/05/26 Javascript
JavaScript验证电子邮箱的函数
2014/08/22 Javascript
JS实现自动固定顶部的悬浮菜单栏效果
2015/09/16 Javascript
手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效
2016/12/06 Javascript
JavaScript利用正则表达式替换字符串中的内容
2016/12/12 Javascript
Vue + Webpack + Vue-loader学习教程之相关配置篇
2017/03/14 Javascript
Vue的百度地图插件尝试使用
2017/09/06 Javascript
Js和VUE实现跑马灯效果
2020/05/25 Javascript
基于JavaScript的数据结构队列动画实现示例解析
2020/08/06 Javascript
vue+vant实现购物车全选和反选功能
2020/11/17 Vue.js
python中使用百度音乐搜索的api下载指定歌曲的lrc歌词
2014/07/18 Python
python2与python3中关于对NaN类型数据的判断和转换方法
2018/10/30 Python
Python数据类型之List列表实例详解
2019/05/08 Python
Python pandas自定义函数的使用方法示例
2019/11/20 Python
Python实现子类调用父类的初始化实例
2020/03/12 Python
Django Path转换器自定义及正则代码实例
2020/05/29 Python
查看keras的默认backend实现方式
2020/06/19 Python
详解css3中dispaly的Grid布局与Flex布局
2020/09/11 HTML / CSS
澳大利亚优质葡萄酒专家:Vintage Cellars
2019/01/08 全球购物
实习鉴定评语
2014/01/19 职场文书
女子职高个人自荐书
2014/02/01 职场文书
学雷锋演讲稿
2014/03/04 职场文书
车间主任岗位职责
2014/03/16 职场文书
售后服务承诺书
2014/03/26 职场文书
教师遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
校园广播稿精选
2014/10/01 职场文书
2015小学五年级班主任工作总结
2015/05/21 职场文书
安全生产隐患排查制度
2015/08/05 职场文书
第四次工业革命,打工人与机器人的竞争
2022/04/21 数码科技