Как я могу управлять DOCUMENT_ROOT для работы над localhost и живым сервером?

Для хранения URL, работающих в управляемых версией проектах, я использовал $ _SERVER ['DOCUMENT_ROOT']. Проблема, я разрабатываю проекты в папке, таким образом, я получаю это:

$ _SERVER ['DOCUMENT_ROOT']. '/folder/path/to/file.php'

Когда я иду живой, я обычно просто хочу следующее:

$ _SERVER ['DOCUMENT_ROOT']. '/path/to/file.php'

Я знаю, что существуют большие проблемы в мире, чем необходимость удалить и добавить это имя папки, но есть ли способ, которым я могу легко автоматизировать это? Я могу так или иначе установить свой корень документа локально для включения папки, в которой я работаю? У меня есть фундаментальное неверное толкование способа, которым работают вещи? Довольно новый в этом материале, и надеющийся изучать как можно больше и действительно grok, "почему".

Большое спасибо!

8
задан Joshua Cody 21 February 2010 в 08:00
поделиться

1 ответ

Вместо использования $ _ SERVER [' DOCUMENT_ROOT '] , почему бы не объявить константу, которая всегда содержит корень вашего веб-приложения?

<?php
define('ABSPATH', dirname(__FILE__));

Поместите следующий код в файл, расположенный в корневой папке вашего приложения, и включите его при каждой загрузке страницы.

Тогда вы всегда можете просто сделать $ path = ABSPATH. '/ путь / к / файлу.php '; независимо от того, находится ли ваша локальная копия в подкаталоге , папке или нет.


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

Обратите внимание, что вам может потребоваться добавить дополнительные вызовы dirname () в зависимости от того, где находится этот файл. Добавьте по одному для каждого каталога, который вы переходите из корня вашего веб-приложения.

Например, если ваше веб-приложение находится в / webapp / , а ваше «глобальное включение» находится в /webapp/includes/framework/init.php , то указанное выше код необходимо изменить как таковой:

define('ABSPATH', dirname(dirname(dirname(__FILE__))));

то есть: 2 дополнительных вызова dirname () из-за двух дополнительных папок из корня webapp ( includes / framework )


Пояснение

Приведенный выше код предназначен для размещения в одном файле и только в одном файле в вашем веб-приложении. Этот файл необходимо включать при каждой загрузке страницы.

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

Количество вызовов dirname () зависит от того, насколько глубоко файл, в который вы скопировали и вставили код , находится относительно корневого каталога вашего веб-приложения. Для приведенных выше примеров предположим, что корень вашего веб-приложения представлен как ~ .

Если вы скопируете мой код в ~ / abspath.php , то вам понадобится один вызов dirname () .

Если вы скопируете мой код в ~ / includes / abspath.php , то вам понадобятся два вызова dirname () .

Если вы скопируете мой код в ~ / includes / config / abspath.php , то вам потребуются три вызова dirname () . Теперь давайте просто скажем, что это его последнее местоположение.

В ~ / index.php вы делаете следующее:

<?php
require_once('includes/config/abspath.php');

и получаете доступ к ABSPATH .

В ~ / dir / someOtherPage.php вы делаете следующее:

<?php
require_once('../includes/config/abspath.php');

и получаете доступ к ABSPATH .

Вот почему я говорю, что если у вас уже есть файл, который включается при каждой загрузке страницы, проще просто вставить в него приведенный выше код. Просто убедитесь, что вы изменили количество вызовов dirname () соответственно. Опять же, этот код должен находиться ТОЛЬКО В ОДНОМ ФАЙЛЕ.

10
ответ дан 5 December 2019 в 15:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: