相当于php中的asp.net的ResolveUrl

时间:2011-08-12 16:57:24

标签: php resolveurl

在我的apache www dir中,我有我工作的不同个人项目的子目录。例如:

WWW / webApp1 WWW / webapp2的

我通过http://localhost:81/webApp2访问webApp2 (我目前正在运行一个便携式工具,这就是为什么我在81端口。现在没关系...)

我不是在这里使用虚拟主机,也许我应该这样做,但我对此并不了解。

因此,对于我的webbApp2,我的文件util/files.php具有以下功能:

function BaseUrl ()
{
    $baseDir = dirname(dirname(__FILE__));
    $pos = strrpos($baseDir, '\\');
    if (!$pos)
    {
        $pos = strrpos($baseDir, '/');
    }
    $theDir = substr ($baseDir, $pos + 1);
    if ($theDir == 'public_html')
    {
        $theDir = '~johnny5'; //Hmmmmm...
    }
    return 'http://'.$_SERVER["HTTP_HOST"].'/'.$theDir;
}

我可以从任何php文件中调用此方法来“解析”网址。

require_once("util/files.php");
$myUrl = BaseUrl ().'/someFolderAtTheRootOfWebApp2/myfile.css';
$css = $baseUrl.'/css/tab.css';

然后$css"http://localhost:81/webApp2/someFolderAtTheRootOfWebApp2/myfile.css"。这样我就可以动态生成指向我的css或javascript文件的链接,例如。

在asp.Net中,我会写string url = Page.ResolveUrl ("~/folder/file.css");

它确实有效,但我想知道是否有更优雅的方法来做到这一点。也许有一些内置的PHP来处理它。更重要的是,当我在Linux机器下运行应用程序时,您可以看到带有public_html的补丁来处理我的用户目录。这不是真正的便携式。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

你到底想做什么?获取文件的绝对URL?如果是这样,你必须自己做逻辑 - 因为php没有真正集成到apache中,所以不知道你的服务器结构。

答案 1 :(得分:0)

在这种情况下使用ini_set和ini_get是个好主意吗?

ini_set('include_class_path', 'http://'.$_SERVER["HTTP_HOST"]."/Project/lib/");
ini_set('include_controls_path', 'http://'.$_SERVER["HTTP_HOST"].'Project/controls/');
echo $get = ini_get('include_class_path');