PHP: Как получить корень документа из каталога пользователя? - PullRequest
1 голос
/ 08 января 2011

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

1 Ответ

4 голосов
/ 08 января 2011

Все, что связано с 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
...