Получить URL-адрес корня для веб-сайта PHP

В настоящее время я работаю над проектом PHP и ищу способ получить URL-адрес для корня веб-сайта; У меня есть файл конфигурации в корне, поэтому я думаю об использовании этого, чтобы выяснить «базовый URL». Я ищу способ сделать это динамически, чтобы я мог найти URL-адрес корня веб-сайта, то есть http://domain.com/my_app/ . Я стараюсь избегать использования относительных путей и использую PHP для генерации URL-адресов для того, что я использую. Например, я использую PHP для генерации CSS-кода и ссылки на CSS-код для изображений, поэтому я хотел бы получить абсолютный URL-адрес здесь вместо относительного пути.

 my_app/ admin/ resources/ css/ admin-css.php imgs/ login.png resources/ css/ css.php imgs/ my-image.png shared-image.png config.php 

В моем файле resources/css/css.php я ищу получение «базового URL», чтобы я мог создать абсолютный URL-адрес в папке imgs например http://img.ruphp.com/php/my-image.png но в настоящее время я получаю http://img.ruphp.com/php/my-image.png так как нижеприведенные определения смотрят на получение каталога загруженного PHP-файла, а не включенного. Я также хотел бы обмениваться изображениями между папками (т.е. получить доступ к файлу shared-image.png из папки admin ), поэтому получение базового URL-адреса было бы идеальным в создании ссылок. Причина, по которой я избегаю относительных путей, заключается в том, что у меня есть функция, которая создает URL-адрес, createURL() , поэтому я могу заставить все URL-адреса работать без необходимости жесткого кода.

 <?php DEFINE('HTTP_TYPE', $_SERVER['HTTP_X_FORWARDED_PROTO']); DEFINE('HTTP_ROOT', $_SERVER['HTTP_HOST']); DEFINE('HTTP_FOLDER', dirname($_SERVER['PHP_SELF']) . '/'); DEFINE('BASE_URL', HTTP_TYPE . "://" . HTTP_ROOT . HTTP_FOLDER); function createURL($pathFromRoot) { return BASE_URL . $pathFromRoot; } 

Все эти определения находятся в моем файле конфигурации, поэтому я думаю, что лучший способ сделать это – получить URL-адрес для файла конфигурации ( http://domain.com/my_app/config.php ) и просто удалить "config.php". Имейте в виду, что веб-сайт может размещаться глубже в структуре папок http://domain.com/my_app/another/folder/config.php или без подпапок http://domain.com/config.php .

Возможно ли это, если да, то как это можно сделать? Или мне нужен другой подход?

Solutions Collecting From Web of "Получить URL-адрес корня для веб-сайта PHP"

После выполнения var_dump $_SERVER и возиться, я обнаружил, что могу создать базовый URL с этим решением, если кто-то наткнется на этот вопрос. Я уверен, что есть другие способы, но это то, что сработало для меня.

 <?php DEFINE('BASE_URL', HTTP_TYPE . "://" . HTTP_ROOT . substr(__DIR__, strlen($_SERVER[ 'DOCUMENT_ROOT' ])) . '/'); 

Мне просто нужно было то же самое, что я объединил ответы здесь и здесь, чтобы создать это решение, которое можно легко преобразовать в несколько констант и / или функцию. Я использую одну точку входа для своего веб-приложения (index.php) и имею конфигурацию в подпапке. Вы можете либо удалить известную папку, как показано в прокомментированной строке кода, либо запустить ее из основной папки. В качестве примера ваша структура может быть либо / или:

  • /public/html/some/random/folders/THEAPP/config.php
    • $urlDir = str_replace($docRoot, '', $dirRoot);

или

  • /public/html/some/random/folders/THEAPP/include/config.php
    • $urlDir = str_replace('/include', '/',str_replace($docRoot, '', $dirRoot));

Весь код:

 $domain = $_SERVER['HTTP_HOST']; $docRoot = $_SERVER['DOCUMENT_ROOT']; $dirRoot = dirname(__FILE__); $protocol = isset($_SERVER["HTTPS"]) ? 'https://' : 'http://'; //$urlDir = str_replace('/include', '/',str_replace($docRoot, '', $dirRoot)); $urlDir = str_replace($docRoot, '', $dirRoot); $site_path = $protocol.$domain.$urlDir; define ('BASE_URL', $site_path); 

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

  • $urlDir = str_replace('/include', '/',str_replace($docRoot, '/', $dirRoot));
  • $urlDir = str_replace($docRoot, '/', $dirRoot);

BTW, функция кажется ненужной, например:

 function createURL($pathFromRoot) { return BASE_URL . $pathFromRoot; } //Anywhere you can call `createURL($value)` makes the following true $isTrue = createURL('/static/js/my.js') === BASE_URL.'/static/js/my.js'; $someNeededURL = '/static/whatever/is/converted/'; $alsoTrue = createURL($someNeededURL) === BASE_URL.$someNeededURL; //and just for fun if ($isTrue.$alsoTrue === 11){ echo 'Not eleven'; } else { echo $isTrue.$alsoTrue.'!==11'; };