解析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正则走开
Mar 15 PHP
php一些错误处理的方法与技巧总结
Aug 10 PHP
PHP常用数组函数介绍
Jul 28 PHP
本地计算机无法启动Apache故障处理
Aug 08 PHP
THINKPHP支持YAML配置文件的设置方法
Mar 17 PHP
php获取网页里所有图片并存入数组的方法
Apr 06 PHP
Thinkphp框架开发移动端接口(1)
Aug 18 PHP
PHP实现批量检测网站是否能够正常打开的方法
Aug 23 PHP
php组合排序简单实现方法
Oct 15 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
Nov 10 PHP
PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
Feb 25 PHP
关于laravel5.5的定时任务详解(demo)
Oct 23 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 str_pad 函数使用详解
2009/01/13 PHP
php安全之直接用$获取值而不$_GET 字符转义
2012/06/03 PHP
php eval函数用法总结
2012/10/31 PHP
PHP编程之设置apache虚拟目录
2016/07/08 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
2018/02/08 PHP
实例解析php的数据类型
2018/10/24 PHP
SyntaxHighlighter代码加色使用方法
2008/09/07 Javascript
js中eval详解
2012/03/30 Javascript
jquery cookie的用法总结
2013/11/18 Javascript
js中同步与异步处理的方法和区别总结
2013/12/25 Javascript
javascript框架设计之类工厂
2015/06/23 Javascript
js实现表单检测及表单提示的方法
2015/08/14 Javascript
bootstrap与Jquery UI 按钮样式冲突的解决办法
2016/09/23 Javascript
Form表单按回车自动提交表单的实现方法
2016/11/18 Javascript
JS实现页面进入和返回定位到具体位置
2016/12/08 Javascript
微信小程序滑动选择器的实现代码
2018/08/10 Javascript
[01:31:02]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第一场
2019/08/22 DOTA
python3使用urllib示例取googletranslate(谷歌翻译)
2014/01/23 Python
Python判断文件和字符串编码类型的实例
2017/12/21 Python
python web基础之加载静态文件实例
2018/03/20 Python
python opencv将表格图片按照表格框线分割和识别
2019/10/30 Python
Python发送邮件封装实现过程详解
2020/05/09 Python
Keras:Unet网络实现多类语义分割方式
2020/06/11 Python
Moda Italia荷兰:意大利男士服装
2019/08/31 全球购物
PHP如何防止SQL注入
2014/05/03 面试题
机电工程专业应届生求职信
2013/10/03 职场文书
配件采购员岗位职责
2013/12/03 职场文书
《小小雨点》教学反思
2014/02/18 职场文书
常务副总经理任命书
2014/06/05 职场文书
水利水电专业自荐信
2014/07/08 职场文书
2015年艾滋病宣传活动总结
2015/03/27 职场文书
2016秋季运动会开幕词
2016/03/04 职场文书
利用Java设置Word文本框中的文字旋转方向的实现方法
2021/06/28 Java/Android
MyBatis-Plus 批量插入数据的操作方法
2021/09/25 Java/Android
Golang 结构体数据集合
2022/04/22 Golang
浅谈css清除浮动(clearfix和clear)的用法
2023/05/21 HTML / CSS