У меня есть файл конфигурации. Это не отдельный файл. Я буду включать этот файл в верхней части страниц, которые я хочу использовать, используя 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
либерально в своем развитии, так как это часто единственная динамическая переменная, доступная для построения определенных путей с самореференциями. Существует некоторая ошибка, связанная с ошибкой 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' ] ) )).'/');