Это хорошая идея использовать $_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
.
Я не вижу никаких проблем с этим, но в целом, что может пойти не так?
Ответы
Ответ 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/
все еще работают!