PHP: Как получить корень документа изнутри каталога пользователя?

Я разрабатываю и развертываю различные приложения PHP в разных средах. Особенно в средах разработки они могут быть где угодно, от document_root до / Users / me / Sites / or even / Users / me / Sites / someapp /

Внутри этих приложений мне нужно знать, где «корень приложения», один раз в качестве реального пути и один раз в качестве URL-адреса. Путь не проблема. Предположим, у меня есть bootstrap.php в корневом каталоге приложения, который делает:

define("BASE_DIR", realpath(dirname(__FILE__))); 

Однако у меня есть проблемы с надежным получением базового URL. В большинстве сред просто вычитание корня документа из BASE_DIR работает:

 define("BASE_URL", str_replace($_SERVER['DOCUMENT_ROOT'],'',BASE_DIR) . "/"); 

Теперь моя проблема: это не работает в средах, где мое приложение находится внутри моего каталога пользователей, потому что PHP все еще видит основной корень документа. Кто-нибудь решил эту проблему?

Related of "PHP: Как получить корень документа изнутри каталога пользователя?"

Все, что связано с realpath () и DOCUMENT_ROOT, будет терпеть неудачу, если у сервера настроены псевдонимы. Рассмотрим сценарий, в котором Apache имеет такую ​​конфигурацию:

 DocumentRoot /home/httpd/html Alias /testalias /home/otherdir 

И вы получаете доступ к скрипту в example.com/testalias/script.php .

Сценарий вернется:

 realpath(dirname(__FILE__)) -> /home/otherdir $_SERVER['DOCUMENT_ROOT'] -> /home/httpd/html BASE_DIR -> /home/otherdir BASE_URL -> /home/otherdir/ 

и все же остальная часть сайта фактически существует в /home/httpd/html

Возможно, вам удастся восстановить URL-адрес на основе $_SERVER['SCRIPT_NAME'] , который является частью имени пути / сценария URL-адреса:

 $_SERVER['SCRIPT_NAME'] -> /testalias/script.php