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

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

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 .

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

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

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

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

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

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

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

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

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

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

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

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