解析php 版擷取重新導向後的地址(代碼)

來源:互聯網
上載者:User

代碼如下:
//取重新導向的地址
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.1rn";
$request .= 'Host: ' . $url_parts['host'] . "rn";
$request .= "Connection: Closernrn";
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("5.jpg")."'/>";
?>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.