Как использовать корневой путь с require?

#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 файл с любой страницы сайта.