解析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 正则匹配函数体
Aug 25 PHP
php inc文件使用的风险和注意事项
Nov 12 PHP
纯PHP生成的一个树叶图片画图例子
Apr 16 PHP
PHP以mysqli方式连接类完整代码实例
Jul 15 PHP
php源码分析之DZX1.5随机数函数random用法
Jun 17 PHP
php实现多城市切换特效
Aug 09 PHP
yii2高级应用之自定义组件实现全局使用图片上传功能的方法
Oct 08 PHP
laravel创建类似ThinPHP中functions.php的全局函数
Nov 26 PHP
PHP+Ajax 检测网络是否正常实例详解
Dec 16 PHP
php图像验证码生成代码
Jun 08 PHP
Yii框架多语言站点配置方法分析【中文/英文切换站点】
Apr 07 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
山进SANGEAN ATS-909X电路分析
2021/03/02 无线电
php调用mysql存储过程实例分析
2014/12/29 PHP
My Desktop :) 桌面式代码
2008/12/29 Javascript
学习ExtJS TextField常用方法
2009/10/07 Javascript
Javascript Jquery 遍历Json的实现代码
2010/03/31 Javascript
window.open关于浏览器拦截问题分析及解决方法
2013/02/05 Javascript
基于jquery实现的图片在各种分辨率下未知的容器内上下左右居中
2014/05/11 Javascript
jquery实现的仿天猫侧导航tab切换效果
2015/08/24 Javascript
js中 计算两个日期间的工作日的简单实例
2016/08/08 Javascript
jQuery Easyui Datagrid实现单行的上移下移及保存移动的结果
2016/08/15 Javascript
vuejs在解析时出现闪烁的原因及防止闪烁的方法
2016/09/19 Javascript
AngularJS压缩JS技巧分析
2016/11/08 Javascript
解析JavaScript实现DDoS攻击原理与保护措施
2016/12/26 Javascript
Node.js安装配置图文教程
2017/05/10 Javascript
bootstrap table实现点击翻页功能 可记录上下页选中的行
2017/09/28 Javascript
jQuery实现下拉菜单动态添加数据点击滑出收起其他功能
2018/06/14 jQuery
js 使用ajax设置和获取自定义header信息的方法小结
2020/03/12 Javascript
vue登录页实现使用cookie记住7天密码功能的方法
2021/02/18 Vue.js
python中实现迭代器(iterator)的方法示例
2017/01/19 Python
python实现rsa加密实例详解
2017/07/19 Python
python递归打印某个目录的内容(实例讲解)
2017/08/30 Python
如何运行.ipynb文件的图文讲解
2019/06/27 Python
python字典嵌套字典的情况下找到某个key的value详解
2019/07/10 Python
python plotly绘制直方图实例详解
2019/07/22 Python
python安装scipy的步骤解析
2019/09/28 Python
python实现按首字母分类查找功能
2019/10/31 Python
python 还原梯度下降算法实现一维线性回归
2020/10/22 Python
CSS3不透明度实例讲解
2016/04/26 HTML / CSS
canvas基础之图形验证码的示例
2018/01/02 HTML / CSS
优秀村官事迹材料
2014/01/10 职场文书
比赛口号大全
2014/06/10 职场文书
2014年机关作风建设工作总结
2014/10/23 职场文书
会计岗位工作总结
2015/08/12 职场文书
2016年习总书记讲话学习心得体会
2016/01/20 职场文书
MySQL数据库优化之通过索引解决SQL性能问题
2022/04/10 MySQL
Python简易开发之制作计算器
2022/04/28 Python