解析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下用cookie统计用户访问网页次数的代码
May 09 PHP
用来解析.htgroup文件的PHP类
Sep 05 PHP
ThinkPHP内置jsonRPC的缺陷分析
Dec 18 PHP
PHP+jQuery+Ajax实现分页效果 jPaginate插件的应用
Oct 09 PHP
php通过两层过滤获取留言内容的方法
Jul 11 PHP
PHP数字前补0的自带函数sprintf 和number_format的用法(详解)
Feb 06 PHP
php实现的双色球算法示例
Jun 20 PHP
PHP实现阿里大鱼短信验证的实例代码
Jul 10 PHP
PHP编程快速实现数组去重的方法详解
Jul 22 PHP
php表单习惯用的正则表达式
Oct 11 PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
Jul 03 PHP
实例分析10个PHP常见安全问题
Jul 09 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
mysql下创建字段并设置主键的php代码
2010/05/16 PHP
浅谈使用 PHP 进行手机 APP 开发(API 接口开发)
2014/08/11 PHP
php防止站外远程提交表单的方法
2014/10/20 PHP
php+mysql+jquery实现简易的检索自动补全提示功能
2017/04/15 PHP
在 Laravel 项目中使用 webpack-encore的方法
2019/07/21 PHP
childNodes.length与children.length的区别
2009/05/14 Javascript
Jquery 高亮显示文本中重要的关键字
2009/12/24 Javascript
基于jquery的页面划词搜索JS
2010/09/14 Javascript
js 判断脚本加载完毕的代码
2011/07/13 Javascript
javascript内置对象arguments详解
2014/03/16 Javascript
JavaScript获取两个数组交集的方法
2015/06/09 Javascript
JS编写函数实现对身份证号码最后一位的验证功能
2016/12/29 Javascript
微信端开发--登录小程序步骤
2017/01/11 Javascript
基于jQuery实现简单人工智能聊天室
2017/02/10 Javascript
微信小程序实现animation动画
2018/01/26 Javascript
Vue使用vue-area-linkage实现地址三级联动效果的示例
2018/06/27 Javascript
node中的密码安全(加密)
2018/09/17 Javascript
[54:41]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VGJ.T VS paiN
2018/03/31 DOTA
Python遍历目录中的所有文件的方法
2016/07/08 Python
Python中函数及默认参数的定义与调用操作实例分析
2017/07/25 Python
python面向对象入门教程之从代码复用开始(一)
2018/12/11 Python
python中几种自动微分库解析
2019/08/29 Python
python 实现提取log文件中的关键句子,并进行统计分析
2019/12/24 Python
tensorflow 实现自定义梯度反向传播代码
2020/02/10 Python
解析python 中/ 和 % 和 //(地板除)
2020/06/28 Python
Python tkinter实现日期选择器
2021/02/22 Python
意大利网上购书网站:Libraccio.it
2021/02/03 全球购物
CLR与IL分别是什么含义
2016/08/23 面试题
心理健康课教学反思
2014/02/13 职场文书
文明礼仪演讲稿
2014/05/12 职场文书
文化建设工作方案
2014/05/12 职场文书
行政人事主管岗位职责
2015/04/11 职场文书
个人原因辞职信模板
2015/05/13 职场文书
建党伟业的观后感
2015/06/01 职场文书
2016年妇联“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
如何使用Python对NetCDF数据做空间相关分析
2021/04/21 Python