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

StackOverflow https://stackoverflow.com/questions/4634869

Вопрос

Я разрабатываю и развертываю различные PHP-приложения в разных средах.Особенно в средах разработки, они могут быть где угодно, от document_root до /Users/me/Sites / или даже /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 по-прежнему видит корневой каталог основного документа.Кто-нибудь решил эту проблему?

Это было полезно?

Решение

Все, что связано с 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-адреса path / script name:

$_SERVER['SCRIPT_NAME'] -> /testalias/script.php
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top