Как я могу контролировать DOCUMENT_ROOT для работы на локальном и живом сервере? - PullRequest
8 голосов
/ 21 февраля 2010

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

$ _ SERVER ['DOCUMENT_ROOT']. «/folder/path/to/file.php'

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

$ _ SERVER ['DOCUMENT_ROOT']. «/path/to/file.php'

Я знаю, что в мире есть более серьезные проблемы, чем удаление и добавление этого имени папки, но есть ли способ, которым я могу легко автоматизировать это? Можно ли как-то установить корневой каталог моего документа, чтобы включить папку, в которой я работаю? У меня есть фундаментальное неправильное понимание того, как все работает? Что-то новенькое в этом, и стремление узнать как можно больше и по-настоящему ухмыляться «почему»

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

Ответы [ 2 ]

10 голосов
/ 21 февраля 2010

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

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

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

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


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

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

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

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

т.е.: 2 дополнительных dirname() вызова из-за двух дополнительных папок из корня веб-приложения (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() соответственно. Опять же, этот код должен быть в ТОЛЬКО ОДНОМ ФАЙЛЕ.

1 голос
/ 03 декабря 2016

объявить ниже строки в любом из root file (index.php)

$_SESSION["uploads_base_url"]=dirname(__FILE__); 

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

echo $uploads_base_url=$_SESSION["uploads_base_url"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...