Как найти базовый url приложения?

Я хотел бы найти базовый url моего приложения, чтобы я мог автоматически ссылаться на другие файлы в моем дереве приложений...

таким образом, данный файл config.php в базе моего приложения, если файл в подкаталоге включает его, знает, с чем префикс url-адреса.

application/config.php
application/admin/something.php
application/css/style.css

поэтому, учитывая, что http://www.example.com/application/admin/something.php доступен, я хочу, чтобы он мог знать, что файл css находится в $approot/css/style.css. В этом случае $approot это "/application " но я хотел бы знать, если приложение установлен в другом месте.

Я не уверен, что это возможно, многие приложения (phpMyAdmin, Squirrelmail, я думаю) должны установить переменную конфигурации для начала. Это было бы более удобным для пользователя, если бы он просто знал.

11 ответов


Я использую следующее в рамках homebrew... Поместите это в файл в корневую папку вашего приложения и просто включите его.

define('ABSPATH', str_replace('\', '/', dirname(__FILE__)) . '/');

$tempPath1 = explode('/', str_replace('\', '/', dirname($_SERVER['SCRIPT_FILENAME'])));
$tempPath2 = explode('/', substr(ABSPATH, 0, -1));
$tempPath3 = explode('/', str_replace('\', '/', dirname($_SERVER['PHP_SELF'])));

for ($i = count($tempPath2); $i < count($tempPath1); $i++)
    array_pop ($tempPath3);

$urladdr = $_SERVER['HTTP_HOST'] . implode('/', $tempPath3);

if ($urladdr{strlen($urladdr) - 1}== '/')
    define('URLADDR', 'http://' . $urladdr);
else
    define('URLADDR', 'http://' . $urladdr . '/');

unset($tempPath1, $tempPath2, $tempPath3, $urladdr);

приведенный выше код определяет две константы. ABSPATH содержит абсолютный путь к корню приложения (локальная файловая система), а URLADDR содержит полный URL-адрес приложения. Он работает в ситуациях mod_rewrite.


вы можете найти базовый url со следующим кодом:

define('SITE_BASE_PATH','http://'.preg_replace('/[^a-zA-Z0-9]/i','',$_SERVER['HTTP_HOST']).'/'.str_replace('\','/',substr(dirname(__FILE__),strlen($_SERVER['DOCUMENT_ROOT']))).'/');

короткие и лучшие.


REQUEST_URI в сочетании с dirname () может сказать вам ваш текущий каталог, относящийся к пути URL:

<?php
  echo  dirname($_SERVER["REQUEST_URI"]);
?>

Итак http://example.com/test/test.php печать "/ test " или http://example.com/ печать "/", которую можно использовать для создания ссылок на другие страницы относительно текущего пути.

редактировать: только что понял при перечитывании, что вы можете спросить о пути на диске, а не путь URL-адреса. В этом случае вы хотите PHP getcwd () функция:

<?php
  echo  getcwd();
?>

Если вы не отслеживаете это самостоятельно, я не думаю, что это будет иметь определение. Или, скорее, вы просите PHP отслеживать то, что вы несколько произвольно определяете.

короче говоря, если я правильно понимаю ваш вопрос, я не верю, что то, что вы просите, существует, по крайней мере, не как "основной" PHP; данная структура может предоставить "корневой" URL относительно структуры каталогов, которая это понимает.

Это делает смысл?


поместите это в свою конфигурацию.php (который находится в корневом каталоге вашего приложения):

$approot = substr(dirname(__FILE__),strlen($_SERVER['DOCUMENT_ROOT']));

думаю, этого достаточно.


url корень приложения можно найти по

$protocol = (strstr('https',$_SERVER['SERVER_PROTOCOL']) === false)?'http':'https';
$url = $protocol.'://'.$_SERVER['SERVER_NAME'].dirname($_SERVER['REQUEST_URI']);

этот код будет возвращать url-путь любого приложения, будь то онлайн или на автономном сервере.

Я не сделал надлежащей проверки для надлежащего '/'. Пожалуйста, измените его для косых черт.

этот файл должен быть помещен в корень.

пример : если URL-адрес приложения :

http://localhost/test/test/test.php

этот код будет возвращать

http://localhost/test/test

спасибо


одним из решений было бы использовать относительные пути для всего, таким образом, не имеет значения, где установлено приложение. Например, чтобы перейти к таблице стилей, используйте следующее:

../css/style.css

Если вам нужен путь к файловой системе, вы можете использовать $_SERVER['DOCUMENT_ROOT']
Если вам просто нужен путь к файлу, который появляется в URL-адресе после использования домена $_SERVER['REQUEST_URI']


Я никогда не нашел способ сделать это.

Я всегда в конечном итоге устанавливаю переменную конфигурации с путем сервера на один уровень выше веб-корня. Тогда это:

  • $configVar . 'public / whatever /' для вещей внутри root,
  • но вы также можете включить извне с $configVar . 'phpInc / db.Инк.php / ' etc.

Это работает как шарм для меня, везде, где я развертываю, С или без правил перезаписи:

$baseDir = ' http://'.В $_SERVER['HTTP_HOST'].(dirname ($_SERVER ['SCRIPT_NAME'])!= ' / ' ? dirname ($_SERVER ["SCRIPT_NAME"]).'/' : '/');


это то, что я использовал в своем приложении, которое отлично работает, я также использую пользовательский порт, поэтому я должен был учитывать это.

define('DOC_URL', ($_SERVER['HTTPS']=='on'?'https':'http').'://'.$_SERVER['SERVER_NAME'].(!in_array($_SERVER['SERVER_PORT'], array(80,443))?':'.$_SERVER['SERVER_PORT']:'')).dirname($_SERVER['REQUEST_URI']);

затем я использую его, введя следующую...

<img src="<?php echo DOC_URL; ?>/_img/logo.png" />