解析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安装全攻略:APACHE
Oct 09 PHP
用PHP+MySql编写聊天室
Oct 09 PHP
新手学PHP之数据库操作详解及乱码解决!
Jan 02 PHP
浅析虚拟主机服务器php fsockopen函数被禁用的解决办法
Aug 07 PHP
PHP禁止个别IP访问网站
Oct 30 PHP
php配合jquery实现增删操作具体实例
Dec 12 PHP
php自定义apk安装包实例
Oct 20 PHP
简单谈谈PHP中的Reload操作
Dec 12 PHP
PHP实现基于栈的后缀表达式求值功能
Nov 10 PHP
PHP长连接实现与使用方法详解
Feb 11 PHP
yii2实现Ueditor百度编辑器的示例代码
Nov 02 PHP
php反射学习之不用new方法实例化类操作示例
Jun 14 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
我的论坛源代码(七)
2006/10/09 PHP
php中截取字符串支持utf-8
2007/01/18 PHP
php 删除无限级目录与文件代码共享
2008/11/22 PHP
php 高效率写法 推荐
2010/02/21 PHP
PHP + plupload.js实现多图上传并显示进度条加删除实例代码
2017/03/06 PHP
PHP封装的完整分页类示例
2018/08/21 PHP
设定php简写功能的方法
2019/11/28 PHP
统一接口:为FireFox添加IE的方法和属性的js代码
2007/03/25 Javascript
javascript下IE与FF兼容函数收集
2008/09/17 Javascript
点击隐藏页面左栏或右栏实现js代码
2013/04/01 Javascript
Js与下拉列表处理问题解决
2014/02/13 Javascript
关于javascript模块加载技术的一些思考
2014/11/28 Javascript
JS实现从网页顶部掉下弹出层效果的方法
2015/08/06 Javascript
JS实现浏览器状态栏文字从右向左弹出效果代码
2015/10/27 Javascript
学习JavaScript鼠标响应事件
2015/12/25 Javascript
JavaScript中的this引用(推荐)
2016/08/05 Javascript
JavaScript 中 avalon绑定属性总结
2016/10/19 Javascript
9个让JavaScript调试更简单的Console命令
2016/11/14 Javascript
详解React中的组件通信问题
2017/07/31 Javascript
JS实现HTML页面中动态显示当前时间完整示例
2018/07/30 Javascript
Node.js HTTP服务器中的文件、图片上传的方法
2019/09/23 Javascript
vue遍历对象中的数组取值示例
2019/11/07 Javascript
使用Python读取安卓手机的屏幕分辨率方法
2018/03/31 Python
解决DataFrame排序sort的问题
2018/06/07 Python
基于Python实现用户管理系统
2019/02/26 Python
python实现最速下降法
2020/03/24 Python
Python分析最近大火的网剧《隐秘的角落》
2020/07/02 Python
纯CSS3实现圆圈动态发光特效动画的示例代码
2021/03/08 HTML / CSS
幼儿教师思想汇报
2014/01/10 职场文书
中专生职业生涯规划书范文
2014/01/10 职场文书
2014年光棍节活动策划方案(创意集锦)
2014/09/29 职场文书
经费申请报告
2015/05/15 职场文书
寒假生活随笔
2015/08/15 职场文书
golang中的struct操作
2021/11/11 Golang
Python使用OpenCV实现虚拟缩放效果
2022/02/28 Python
Python探索生命起源 matplotlib细胞自动机动画演示
2022/04/21 Python