Heim > php教程 > PHP源码 > Hauptteil

php 版获取重定向后的地址

PHP中文网
Freigeben: 2016-05-25 17:15:12
Original
1906 Leute haben es durchsucht

php 版获取重定向后的地址

<?php
//取重定向的地址
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[&#39;host&#39;])) return false; //can&#39;t process relative URLs
        if (!isset($url_parts[&#39;path&#39;])) $url_parts[&#39;path&#39;] = &#39;/&#39;;
 
        $sock = fsockopen($url_parts[&#39;host&#39;], (isset($url_parts[&#39;port&#39;]) ? 
        (int)$url_parts[&#39;port&#39;] : 80), $errno, $errstr, 30);
        if (!$sock) return false;
 
        $request = "HEAD " . $url_parts[&#39;path&#39;] . (isset($url_parts[&#39;query&#39;]) ? &#39;?&#39;.$url_parts[&#39;query&#39;] : &#39;&#39;) .
         " HTTP/1.1\r\n";
        $request .= &#39;Host: &#39; . $url_parts[&#39;host&#39;] . "\r\n";
        $request .= "Connection: Close\r\n\r\n";
        fwrite($sock, $request);
        $response = &#39;&#39;;
        while(!feof($sock)) $response .= fread($sock, 8192);
        fclose($sock);
 
        if (preg_match(&#39;/^Location: (.+?)$/m&#39;, $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 = &#39;noimg.gif&#39;,
$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=&#39;".get_show_pic("http://i2.ku6img.com/encode/picpath/2010/12/9/14/1294948410019/5.jpg")."&#39;/>";
?>
Nach dem Login kopieren

2.PHP代码

<?php
//取重定向的地址
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[&#39;host&#39;])) return false; //can&#39;t process relative URLs
        if (!isset($url_parts[&#39;path&#39;])) $url_parts[&#39;path&#39;] = &#39;/&#39;;
 
        $sock = fsockopen($url_parts[&#39;host&#39;], (isset($url_parts[&#39;port&#39;]) ? (int)$url_parts[&#39;port&#39;] : 80),
         $errno, $errstr, 30);
        if (!$sock) return false;
 
    $request = "HEAD " . $url_parts[&#39;path&#39;] . (isset($url_parts[&#39;query&#39;]) ? 
    &#39;?&#39;.$url_parts[&#39;query&#39;] : &#39;&#39;) . " HTTP/1.1\r\n";
        $request .= &#39;Host: &#39; . $url_parts[&#39;host&#39;] . "\r\n";
        $request .= "Connection: Close\r\n\r\n";
        fwrite($sock, $request);
        $response = &#39;&#39;;
        while(!feof($sock)) $response .= fread($sock, 8192);
        fclose($sock);
 
        if (preg_match(&#39;/^Location: (.+?)$/m&#39;, $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 = &#39;noimg.gif&#39;,
$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=&#39;".get_show_pic("http://i2.ku6img.com/encode/picpath/2010/12/9/14/1294948410019/5.jpg")."&#39;/>";
?>
Nach dem Login kopieren

 以上就是php 版获取重定向后的地址的内容,更多相关内容请关注PHP中文网(www.php.cn)!


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage