PHP Динамически получить полный Абсолютный URL-адрес для определенного файла, который будет включен в другие файлы

У меня есть файл конфигурации. Это не отдельный файл. Я буду включать этот файл в верхней части страниц, которые я хочу использовать, используя require (). Я хочу динамически получить полный абсолютный URL-адрес этого файла конфигурации , независимо от его местоположения и сохранить его как константу внутри себя. Например:

Физическое местоположение: (корневой каталог) /my_folder/configuration.php

Нужен URL как: www.mydomain.com/my_folder/configuration.php

Физическое местоположение: (корневой каталог) /demos/my_folder/configuration.php

Нужный URL: www.mydomain.com/demos/my_folder/configuration.php

Физическое местоположение: (корневой каталог) /demos/site1/my_folder/configuration.php

URL-адрес потребности: www.mydomain.com/demos/site1/my_folder/configuration.php

Физическое местоположение: (корневой каталог) /demos/site2/my_folder/configuration.php

Нужный URL: www.mydomain.com/demos/site2/my_folder/configuration.php

Простой до сих пор? Вот что действительно необходимо и усложняет (IMO). Учти это:

Файл конфигурации расположен по адресу: www.mydomain.com/demos/site2/my_folder/configuration.php

Имеют вложенные папки: www.mydomain.com/demos/site2/1/2/3/index.php

Когда я обращаюсь к файлу index.php в подпапке «3», следуя указанному выше URL-адресу, мне нужен путь к файлу конфигурации как www.mydomain.com/demos/site2/my_folder/configuration.php, а не как www. mydomain.com/demos/site2/1/2/3/my_folder/configuration.php

Как я могу достичь вышеуказанного?

Если вы можете положиться на значение $_SERVER[ 'DOCUMENT_ROOT' ] , то внутри configuration.php :

 $path = substr( __FILE__, strlen( $_SERVER[ 'DOCUMENT_ROOT' ] ) ); $url = "www.mydomain.com{$path}"; 

Если он подходит для вашего прецедента, вы можете сделать его более динамичным, используя $_SERVER[ 'HTTP_HOST' ] ;

DOCUMENT_ROOT

Я использовал DOCUMENT_ROOT либерально в своем развитии, так как это часто единственная динамическая переменная, доступная для построения определенных путей с самореференциями. Существует некоторая ошибка, связанная с ошибкой Apache ( # 26052 ) о том, как плохо обрабатывается DOCUMENT_ROOT , в частности, что Apache не позволит вам установить значение с помощью RewriteRule и не придает ему разумного значения при использовании mod_vhost_alias. Обсуждение продолжается в течение 7-8 лет, поскольку люди, предположительно из проекта Apache, сопротивляются изменению поведения, пока они, наконец, не пришли и не изменились в этом году в 2.4.1. (Я изучал это ранее, но теперь я забыл, какие были точные изменения и насколько они удовлетворяют.)

Если вы посмотрите на комментарии к билету, вы увидите, что люди сопротивляются изменениям поведения с комментариями, такими как:

Не доверяйте переменной DOCUMENT_ROOT.

DOCUMENT_ROOT не был, никогда не был и никогда не будет надежным способом поиска пути файловой системы к веб-контенту.

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

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

 define('URL', dirname(substr($_SERVER['SCRIPT_FILENAME'], strlen( $_SERVER[ 'DOCUMENT_ROOT' ] ) )).'/');