Я привык, что DocumentRoot является абсолютным путем к местоположению DocRoot веб-сайта, обычно что-то вроде /usr/local/www/apache2/data/virtualhost_name
. Затем он доступен из PHP через $_SERVER['DOCUMENT_ROOT']
переменная.
Я размещал веб-сайты у нескольких поставщиков виртуального хостинга, и у всех это было именно так. Теперь я перешел к новому провайдеру, у которого он настроен иначе. PHP $_SERVER['DOCUMENT_ROOT']
всегда показывает /
. У меня есть несколько веб-сайтов на сервере в разных папках, но все они показывают /
как DocumentRoot.
Как я могу добиться того же на собственном сервере разработки?
Я предполагаю, что они CHROOT'd каждый сайт, это распространено у многих провайдеров виртуального хостинга, чтобы не раскрывать структуру каталогов сервера.
В консоли, если вы выполните
ls -l
отображаются ли файлы веб-сервера как принадлежащие пользователю сайта? I.E. у каждого веб-сайта есть собственная учетная запись пользователя на сервере. Если это так, я бы предположил, что это CHROOT, что достаточно легко сделать. (Некоторые инструкции здесь)
Также проверьте, где находится текущий файл
<?php
echo dirname(__FILE__);
?>
(Это покажет вам каталог текущего файла, если корень документа - '/', тогда этот скрипт должен вернуть что-то вроде '/myphpfile.php')
Хотя я не проверял, изменит ли CHROOT DOCUMENT_ROOT в PHP, я предполагаю, что это произойдет.
Однако я не понимаю, почему наличие DOCUMENT_ROOT as / было бы проблемой, если вы загружаете его динамически из глобального $ _SERVER, а не жестко кодируете каталог, это не должно быть проблемой.