解析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和ACCESS写聊天室(二)
Oct 09 PHP
PHP配置心得包含MYSQL5乱码解决
Nov 20 PHP
php的日期处理函数及uchome的function_coomon中日期处理函数的研究
Jan 12 PHP
PHP文件操作实现代码分享
Sep 01 PHP
解析CodeIgniter自定义配置文件
Jun 18 PHP
服务器上配置PHP运行环境教程
Feb 12 PHP
php类自动加载器实现方法
Jul 28 PHP
Joomla调用系统自带编辑器的实现方法
May 05 PHP
浅谈php中fopen不能创建中文文件名文件的问题
Feb 06 PHP
PHP常用的三种设计模式
Feb 17 PHP
PHP实现上传图片到数据库并显示输出的方法
May 31 PHP
PHP基于PDO扩展操作mysql数据库示例
Dec 24 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
php.ini中的request_order推荐设置
2015/05/10 PHP
在Windows系统下使用PHP生成Word文档的教程
2015/07/03 PHP
Yii实现Command任务处理的方法详解
2016/07/14 PHP
PHP图像识别技术原理与实现
2016/10/27 PHP
30个最好的jQuery 灯箱插件分享
2011/04/25 Javascript
JavaScript起点(严格模式深度了解)
2013/01/28 Javascript
JQueryEasyUI Layout布局框架的使用
2013/04/08 Javascript
在javascript中关于节点内容加强
2013/04/11 Javascript
JQuery给元素绑定click事件多次执行的解决方法
2014/05/29 Javascript
使用js画图之饼图
2015/01/12 Javascript
解决JS请求服务器gbk文件乱码的问题
2015/10/16 Javascript
jQuery实现简单的点赞效果
2020/05/29 Javascript
AngularJS学习第二篇 AngularJS依赖注入
2017/02/13 Javascript
es7学习教程之fetch解决异步嵌套问题的方法示例
2017/07/21 Javascript
浅谈Angular路由复用策略
2017/10/04 Javascript
详解vue的diff算法原理
2018/05/20 Javascript
JavaScript中变量提升与函数提升经典实例分析
2018/07/26 Javascript
JS实现简单省市二级联动
2019/11/27 Javascript
在Django框架中设置语言偏好的教程
2015/07/27 Python
python使用正则表达式来获取文件名的前缀方法
2018/10/21 Python
CentOS6.9 Python环境配置(python2.7、pip、virtualenv)
2019/05/06 Python
TensorFlow实现从txt文件读取数据
2020/02/05 Python
Python Pandas数据分析工具用法实例
2020/11/05 Python
python 窃取摄像头照片的实现示例
2021/01/08 Python
浅谈pc和移动端的响应式的使用
2019/01/03 HTML / CSS
HTML5之SVG 2D入门1—SVG(可缩放矢量图形)概述
2013/01/30 HTML / CSS
Ralph Lauren意大利官方网站:时尚界最负盛名的品牌之一
2018/10/18 全球购物
女大学生个人求职信
2013/12/09 职场文书
岗位聘任书范文
2014/03/29 职场文书
公司采购主管岗位职责
2014/06/17 职场文书
2014副局长群众路线对照检查材料思想汇报
2014/09/22 职场文书
2014年政风行风自查自纠报告
2014/10/21 职场文书
公司员工体检通知
2015/04/21 职场文书
民事申诉状范本
2015/05/20 职场文书
mongoDB数据库索引快速入门指南
2022/03/23 MongoDB
利用Python将list列表写入文件并读取的方法汇总
2022/03/25 Python