Подтвердить что ты не робот

PHP, как найти корень приложения?

У меня проблемы с моими файлами include. Кажется, я не могу понять, как создавать URL-адреса, когда я использую require_once ('somefile.php'). Если я пытаюсь использовать файл include в более чем одном месте, где структуры каталогов различны, я получаю сообщение об ошибке, что файл include не может быть найден.

В asp.net, чтобы получить корневой путь моего приложения, я могу использовать ~/directory/file.aspx. Слабая косая черта всегда знает, что я ссылаюсь на корень моего сайта и нахожу файл независимо от того, где запрос поступает с моего сайта. Он всегда обращается к корню и ищет файл оттуда.

ВОПРОС: . Как я могу получить корневой путь моего сайта? Как я могу сделать это, чтобы я мог повторно использовать свои файлы include из любого места моего сайта? Должен ли я использовать абсолютные пути в моих URL-адресах?

Спасибо!

4b9b3361

Ответ 1

Существует $_SERVER['DOCUMENT_ROOT'], который должен иметь корневой путь к вашему веб-серверу.

Изменить: если вы посмотрите на большинство основных php-программ. При использовании установщика вы обычно вводите полный путь к папке приложения. Установщик просто поместит это в файл конфигурации, который включен во все приложение. Один из вариантов - использовать auto preend file для установки переменной. другой вариант - просто include_once() конфигурационный файл на каждой странице, в которой вы нуждаетесь. Последний вариант, который я хотел бы предложить, - написать вам приложение, используя bootstrapping, в котором вы производите все запросы через один файл (обычно с url_rewrite). Это позволяет вам легко установить/включить конфигурационные переменные в одном месте и обеспечить их доступность во всех сценариях.

Ответ 2

Обычно я храню файл config.php в каталоге ROOT, а в config.php пишу:

define('ROOT_DIR', __DIR__);

А затем просто используйте константу ROOT_DIR во всех других сценариях. Использование $_SERVER['DOCUMENT_ROOT'] не очень хорошо, потому что:

  • Это не всегда соответствует ROOT_DIR
  • Эта переменная недоступна в режиме CGI (например, если вы запускаете свои скрипты CRON)

Ответ 3

Приятно иметь один и тот же код в верхней части каждого script и знать, что ваша страница будет загружаться правильно, даже если вы находитесь в подкаталоге. Я использую это, полагаясь на то, что вы знаете, что называется корневой каталог (обычно это "htdocs" или "public_html":

defined('SITEROOT') or define('SITEROOT', substr($_SERVER['DOCUMENT_ROOT'], 0, strrpos($_SERVER['DOCUMENT_ROOT'], 'public_html')) . 'public_html');

Если SITEROOT определяется последовательно, вы можете получить доступ к файлам конфигурации и/или страницам без адаптации путей на основе script -by- script, например. в файл конфигурации, хранящийся вне вашей корневой папки:

require_once SITEROOT . "/../config.php";

Ответ 4

Вы должны использовать встроенные магические константы для поиска файлов. __FILE__ и __DIR__. Если вы находитесь на PHP < 5.3 вы должны использовать dirname(__FILE__)

например.

require_once __DIR__.'/../../include_me.php';

$_SERVER['DOCUMENT_ROOT'] не всегда гарантированно возвращает то, что вы ожидаете.

Ответ 5

Определите его в файле конфигурации где-нибудь.

Предполагая, что вы используете стиль MVC, где все маршрутизируется через один index.php, тогда

realpath('.');

Покажет вам путь к текущему рабочему каталогу (т.е. где index.php)

Итак, вы можете определить это как

define('PROJECT_ROOT', realpath('.'));

Если это не MVC, и вам нужно, чтобы он работал с файлами в подпапках, вы можете просто скопировать его в файл конфигурации

define('PROJECT_ROOT', 'C:/wamp/www/mysite');

Затем, когда вы включаете что-то, что вы можете сделать,

include PROJECT_ROOT . '/path/to/include.php';

Ответ 6

Вы можете альтернативно установить базовый каталог в файле .htaccess

SetEnv BASE_PATH C:/wamp/www/mysite/

Затем в PHP вы можете ссылаться на него с помощью $_SERVER['BASE_PATH']

Ответ 7

Попробуйте следующее:

$_SERVER['DOCUMENT_ROOT']