В моем apache www dir у меня есть подкаталог для различных личных проектов, над которыми я работаю. Пример:
WWW / webApp1
WWW / webapp2
Я получаю доступ к webApp2 по http://localhost:81/webApp2
(Я сейчас использую портативный wamp, поэтому я на порте 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-файла, чтобы «разрешить» URL.
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, чтобы справиться с этим. И что еще более важно, вы можете увидеть патч с public_html
для обработки моего userdir, когда я запускаю приложение под моей Linux-системой. Это не совсем переносимо.
Есть предложения?