Это, например, хорошая идея?
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!