在PHP中获取主要URL部分

时间:2012-08-08 11:48:05

标签: php url

好的,这就是我要做的事情(实际上它很简单,但我决定发布以防我们提出更聪明的东西......) - )

这就是我的想法:

function getMainPart($url)
{
     $parts = explode("/",$url);
     return str_replace(end($parts),"",$url);
}

你有什么......聪明或更好的建议吗?有任何想法吗? (或者更通用/由PHP直接支持的任何东西?)

6 个答案:

答案 0 :(得分:4)

您正在寻找parse_url

<?php
$url = 'http://username:password@hostname/path?arg=value#anchor';

print_r(parse_url($url));

echo parse_url($url, PHP_URL_PATH);
?>

Array
(
    [scheme] => http
    [host] => hostname
    [user] => username
    [pass] => password
    [path] => /path
    [query] => arg=value
    [fragment] => anchor
)
/path

答案 1 :(得分:4)

你为什么不尝试这个:

$main_path = realpath(dirname(\__FILE__)) . "main_folder/";

答案 2 :(得分:2)

也许这个可以提供帮助:

echo 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);

但这只适用于当前文件 - 不适用于所有随机网址;) 为此,你应该使用parse_url像Fluffeh说的那样..

答案 3 :(得分:2)

“正确”(虽然更长篇大论)的方式:

function getMainPart ($url) {
    $parts = parse_url($url);
    if (!isset($parts['scheme'])) {
        return FALSE; // Not a valid, complete URL
    }
    $out = $parts['scheme'].'://';
    if (!empty($parts['user'])) {
        $out .= $parts['user'];
        if (!empty($parts['pass'])) {
            $out .= ':'.$parts['pass'];
        }
        $out .= '@';
    }
    $out .= $parts['host'];
    if (!empty($parts['port'])) {
        $out .= ':'.$parts['port'];
    }
    $out .= $parts['path'] == '/' ? '/' : dirname($parts['path']);
    return $out;
}

答案 4 :(得分:1)

您需要parse_url()功能。

$parts = parse_url($url);
echo $parts['scheme'] ."://". $parts['host'] . $parts['path'];

答案 5 :(得分:1)

如果你确定你的主要部分总是以/结尾,那么它会更短并且不涉及数组函数:

$url = 'http://www.somedomain.com/subfolder/yet-another-subfolder/final.php?param=2';
function getMainUrlPart($url) {
    return substr($url, 0, strrpos($url, '/')+1);
}
echo getMainUrlPart($url);