原文地址: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_parts ) return 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 (! $sock ) return 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 | ?> |