PHP取url絕對路徑

發表於2019-05-11

<?php
/**
 * 作用: 根據參考url獲取 要轉換的url的 絕對地址(http://xxx)
 * @param string $url 參考url
 * @param string $filename 要轉換的url
 * @return string 轉換後的url
 */
function get_abs_url($url, $filename) {
    // 如果是http|https|ftp|//開頭的
    if (preg_match('/^[a-zA-Z]*\:?\/\//', $filename)) {
        return $filename;
    }
    // 如果是 /common/css/index.css
    if (substr($filename, 0, 1) == '/') {
        preg_match('/^[^\/]*\/\/[^\/]+/', $url, $domain);
        return $domain[0] . $filename;
    }
    // 去掉問號和#號後面的字元, 刪除檔名, 只保留目錄
    $url = strstr($url, '?', true) ? strstr($url, '?', true) :
            (strstr($url, '#', true) ? strstr($url, '#', true) : $url);
    $url = preg_replace('/[^\/]*$/', '', $url);
    // 如果是 ../../common/css/index.css
    if (substr($filename, 0, 3) == '../') {
        $filename = $url . $filename;
        while (preg_match('/[^\/\.]+\/\.\.\//', $filename)) {
            $filename = preg_replace('/[^\/\.]+\/\.\.\//', '', $filename);
        }
        return $filename;
    }
    // 如果是 ./common/css/index.css
    if (substr($filename, 0, 2) == './') {
        return str_replace('/./', '/', $url . $filename);
    }
    return $url . $filename;
}
上面的函式實現了以下幾種轉換模式
echo get_abs_url('http://www.baidu.com/blog/shuai/article/1.html?php=php#hello', '../../../common/css.css');


echo '<br />';
echo get_abs_url('http://www.baidu.com/blog/shuai/article/1.html?php=php#hello', 'http://static.baidu.com/common/css.css');


echo '<br />';
echo get_abs_url('http://www.baidu.com/blog/shuai/article/1.html?php=php#hello', '/common/css.css');


echo '<br />';
echo get_abs_url('http://www.baidu.com/blog/shuai/article/1.html?php=php#hello', './common/css.css');

echo '<br />';
echo get_abs_url('http://www.baidu.com/blog/shuai/article/1.html?php=php#hello', 'css.css');

評論(2)

相關文章