2012-08-08 69 views
1

OK,这就是我想要做的(这是相当匆匆实际上,而是决定在情况下,我们拿出一些更聪明的发布... :-))获取主URL部分

这就是我想的是:

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

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

回答

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

您正在寻找parse_url

<?php 
$url = 'http://username:[email protected]/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 
2

也许这可以帮助:

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

但是,这只是工程目前的文件 - 不是每个随机的URL;) 这个你应该使用parse_url像Fluffeh说的..

+0

这适用于当前文件的URL,而不是任何随机URL。 – Fluffeh 2012-08-08 11:54:53

+0

你是对的;) – tuxtimo 2012-08-08 12:00:24

+0

你可能想要修改你的答案然后队友:) – Fluffeh 2012-08-08 12:01:54

1

你将需要parse_url()功能。

$parts = parse_url($url); 
echo $parts['scheme'] ."://". $parts['host'] . $parts['path']; 
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); 
4

你为什么不试试这个:

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