php 版获取重定向后的地址

原文地址:http://www.oschina.net/code/snippet_95391_2196

<?php
02 //取重定向的地址
03 class RedirectUrl{
04     //地址
05     var $url;
06     //初始化地址
07     function RedirectUrl($url){
08         $this->url = $url;
09     }
10     /**
11      * get_redirect_url()
12      * 取重定向的地址
13      *
14      * @param string $url
15      * @return string
16      */
17     private function get_redirect_url($url){
18         $redirect_url = null;
19  
20         $url_parts = @parse_url($url);
21         if (!$url_partsreturn false;
22         if (!isset($url_parts['host'])) return false; //can't process relative URLs
23         if (!isset($url_parts['path'])) $url_parts['path'] = '/';
24  
25         $sock fsockopen($url_parts['host'], (isset($url_parts['port']) ? (int)$url_parts['port'] : 80), $errno$errstr, 30);
26         if (!$sockreturn false;
27  
28         $request "HEAD " $url_parts['path'] . (isset($url_parts['query']) ?'?'.$url_parts['query'] : '') . " HTTP/1.1\r\n";
29         $request .= 'Host: ' $url_parts['host'] . "\r\n";
30         $request .= "Connection: Close\r\n\r\n";
31         fwrite($sock$request);
32         $response '';
33         while(!feof($sock)) $response .= fread($sock, 8192);
34         fclose($sock);
35  
36         if (preg_match('/^Location: (.+?)$/m'$response$matches)){
37             return trim($matches[1]);
38         else {
39             return false;
40         }
41     }
42  
43     /**
44      * get_all_redirects()
45      * 取所有重定向地址
46      *
47      * @param string $url
48      * @return array
49      */
50     private function get_all_redirects($url){
51         $redirects array();
52         while ($newurl $this->get_redirect_url($url)){
53             if (in_array($newurl$redirects)){
54                 break;
55             }
56             $redirects[] = $newurl;
57             $url $newurl;
58         }
59         return $redirects;
60     }
61  
62     /**
63      * get_final_url()
64      * 取实际地址
65      *
66      * @param string $url
67      * @return string
68      */
69     function get_final_url(){
70         $redirects $this->get_all_redirects($this->url);
71  
72         if (count($redirects)>0){
73             return array_pop($redirects);
74         else {
75             return $this->url;
76         }
77     }
78 }
79  
80 /**
81  * get_show_pic
82  * 取最终要显示的图片地址
83  *
84  * @param string $url
85  * @return  string
86  */
87 function get_show_pic($url,$noimg ='noimg.gif',$newimg="http://special.ku6img.com/projects/2010/d-color/images/slt-1.jpg"){
88     $obj new RedirectUrl($url);
89  
90     $realurl $obj->get_final_url();
91  
92     if(strpos($realurl,$noimg)>0){
93         return $newimg;
94     }
95     return $url;
96 }
97 //参考
98 echo "<img src='".get_show_pic("http://i2.ku6img.com/encode/picpath/2010/12/9/14/1294948410019/5.jpg")."'/>";
99 ?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值