#php #path #require
#php #путь #требовать
Вопрос:
У меня есть личный раздел на сайте со структурой папок, например
www.site.com/privatePath/secretFolder/login.php
Затем некоторые вложенные папки, например
www.site.com/privatePath/secretFolder/grandmasRecipes/applePie.php
Существует общий functions.php наряду с login.php
www.site.com/privatePath/secretFolder/functions.php
(создает $connection, mysql бла-бла-бла)
У меня есть различные вложенные папки и файлы, к которым я хочу подключиться functions.php , некоторые создаются динамически, поэтому решение должно работать из любой позиции файла / папки вообще.
Просто чтобы уточнить:
Поскольку один и тот же файл может вызываться в разных папках, я бы хотел, чтобы он вызывал functions.php файл не из того места, где находится файл, а по отношению к корневой папке. Итак, без относительных ссылок .. / etc
мой вопрос: Как я могу получить доступ к требуемому php-файлу из любого файла на моем веб-сайте?
Комментарии:
1. Динамически генерируемые файлы PHP звучат как действительно плохая идея
2. @Phil совершенно прав. Он существует, потому что меню, подменю и ссылки на страницы создаются через каталоги файлов. Проблема в том, что каждая страница должна создавать сеансы.
3. Хотя я думаю, что полагаться на
DOCUMENT_ROOT
— плохая идея (для начала, это не сработает, если ваш HTTP-сервер не установит свойство), я не вижу причины, по которой ваш код не будет работать. Вы абсолютно увереныrequire 'functions.php';
, что в вашемapplePie.php
скрипте нет строки # 4?4. @Phil, проверил орфографию 1000 раз, перестал «решать», чтобы задать stackoverflow, возвращаясь на страницу моей IDE, и я вижу, что редактировал старую копию arrgggghhhh, ИЗВИНИТЕ, ЧУВАК, ИЗВИНИТЕ, STACKOVERFLOW, ИЗВИНИТЕ И СПАСИБО, ФИЛ. ЧЕЛОВЕЧЕСКАЯ ОШИБКА, так жаль
Ответ №1:
Мой совет — никогда не полагаться на какую-либо внешнюю конфигурацию пути (например, DOCUMENT_ROOT
). Вместо этого используйте пути относительно текущего скрипта…
От login.php
require_once __DIR__ . '/functions.php';
От grandmasRecipes/applePie.php
require_once __DIR__ . '/../functions.php';
Смотрите http://php.net/manual/language.constants.predefined.php#constant.dir
Альтернативой может быть установка include_path
для текущей среды. Вы можете сделать это, скажем .user.ini
, в файле в корне вашего документа
; /home/cpanelLogIn/public_html/.user.ini
include_path="/home/cpanelLogIn/public_html/:."
Затем вы можете просто использовать
require_once 'privatePath/secretFolder/functions.php';
где угодно
Комментарии:
1. Спасибо, Фил, к сожалению, я не могу гарантировать, из какой папки будет вызван созданный файл. Итак, мне нужно решение на основе root.
2. @Gamemorize Я понятия не имею, что это значит
3. Я имею в виду, что, поскольку один и тот же файл может быть вызван в разных папках, я бы хотел, чтобы он вызывал functions.php файл не из того места, где находится файл, а по отношению к корневой папке
4. @Gamemorize Я добавил альтернативу
5. Пожалуйста, добавьте в свой ответ, что DOCUMENT_ROOT будет работать, но у вас есть оговорки, я удалю его из своего вопроса
Ответ №2:
Альтернативное решение:
require ( $_SERVER['DOCUMENT_ROOT'] . "/privatePath/secretFolder/functions.php");
Будет ли доступ functions.php файл с любой страницы сайта.