Подтвердить что ты не робот

Это хорошая идея использовать $_SERVER ['DOCUMENT_ROOT'] в составе?

Это, например, хорошая идея?

require_once($_SERVER['DOCUMENT_ROOT'].'/include.php');

Если у вас есть два виртуальных хоста на одном сервере, один для жизни и один для разработки, с разными Apache DocumentRoots, это позволит избежать включения абсолютных путей, когда источник include неизвестен и может находиться в любом каталоге.

(Примечание: пути к файлу в следующем разделе относятся к корневому веб-сайту. Фактически они будут похожи на /var/www/app/core/init.php, где /var/www/app является корнем веб-сайта)

Например: у меня есть /core/init.php, который вызывается с использованием относительных путей из мест по всему веб-сайту (/file.php, /dir/file.php or /dir/dir/file.php).

Этот init.php включает в себя несколько страниц функций в каталоге фонда, поддиректор /core (как в /core/func/userfunctions.php).

Итак, в init.php я могу использовать метод $_SERVER, потому что он прерывается, если я использую относительный путь и пытаюсь вызвать функции со страницы, например /dir/file.php.

Я не вижу никаких проблем с этим, но в целом, что может пойти не так?

4b9b3361

Ответ 1

Я видел случаи, когда $_SERVER['DOCUMENT_ROOT'] не установлен или не является тем, что вы ожидаете (т.е. не установленным в CLI или старым IIS или недействительным в некоторых установках CGI).

По этой причине вы можете использовать dirname(__FILE__) для получения пути к script, в который вызывается строка. Затем вы можете ссылаться на относительные пути, например,

include dirname(__FILE__) . '/../../other/file.php';

Я перехожу к указанному выше методу, когда структура каталогов файлов известна и не подлежит изменению.

Если DOCUMENT_ROOT недоступно, следующая подходящая замена:

substr($_SERVER['SCRIPT_FILENAME'], 0, -strlen($_SERVER['SCRIPT_NAME']));

Ответ 2

Вам не нужно это делать. PHP ищет включенный файл в корневом каталоге документа по умолчанию.

Вы можете использовать set_include_path ($ new_include_path), чтобы изменить это поведение, или отредактировать include_path в файле конфигурации php.

Кроме того, из http://php.net/manual/en/reserved.variables.server.php:

'DOCUMENT_ROOT'     Корневой каталог документа, в котором выполняется текущий script, как определено в файле конфигурации сервера.

Ответ 3

Например, если вы используете переписывание URL-адресов, вы будете очень счастливы, когда узнаете, что входящие в него страницы /there/are/so/many/paths/in/the/url/of/this/ все еще работают!