1

好的,这就是我正在尝试做的事情(实际上这很快,但决定发布以防我们想出更聪明的东西...... :-))

这就是我的想法:

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

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

4

6 回答 6

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
于 2012-08-08T11:50:45.507 回答
4

你为什么不试试这个:

$main_path = realpath(dirname(\__FILE__)) . "main_folder/";
于 2013-08-22T10:37:28.587 回答
2

也许这个可以帮助:

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

但这仅适用于当前文件-不适用于每个随机 URL ;) 为此,您应该像 Fluffeh 所说的那样使用parse_url 。

于 2012-08-08T11:51:16.693 回答
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;
}
于 2012-08-08T11:56:36.597 回答
1

您将需要此parse_url()功能。

$parts = parse_url($url);
echo $parts['scheme'] ."://". $parts['host'] . $parts['path'];
于 2012-08-08T11:54:28.293 回答
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);
于 2012-08-08T11:56:14.197 回答