Как найти 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, я думаю) должны установить конфигурационную переменную для начала. Это было бы более удобным для пользователя, если бы оно просто знало.

Ответ 1

Я использую следующее в структуре 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.

Ответ 2

Вы можете найти базовый 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']))).'/');

Короткий и лучший.

Ответ 3

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

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

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

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

<?php
  echo  getcwd();
?>

Ответ 4

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

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

Это имеет смысл?

Ответ 5

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

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

Я думаю, что это сделаю.

Ответ 6

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

Спасибо

Ответ 7

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

../css/style.css

Ответ 8

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

Ответ 9

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

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

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

Ответ 10

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

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

Ответ 11

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

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" />