Как устранить длинные относительные пути включения - PullRequest
1 голос
/ 01 февраля 2012

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

require '../../../../config/settings.php';

Ранее я использовал различные методы, и яв настоящее время рассматривается установка переменной окружения на моем хосте, чтобы я мог сделать что-то вроде этого:

require getenv('PROJECT_ROOT') . '/config/settings.php';

Но это действительно возможно только для систем с одним проектом, и у него есть другие недостатки, поэтому мне было интересно, если есть лучший метод?

Ответы [ 4 ]

3 голосов
/ 01 февраля 2012

Если вы хотите пойти по пути переменных среды, вы можете установить переменные среды из вашего Apache vhost.Проверьте SetEnv и SetEnvIf в документации Apache.Например, чтобы предоставить переменную среды для всех входящих запросов для данного хоста Apache:

SetEnv PROJECT_ROOT='/path/to/my/project'

. Например, Чтобы изменить значение переменной среды на основе имени хоста:

SetEnvIf Host www.example.com PROJECT_ROOT='/path/to/example/com'
SetEnvIf Host www.example.org PROJECT_ROOT='/path/to/example/org'

Другие параметрывключает автозагрузку и загрузку. Автозагрузка отлично работает для классов, но не для конфигурационных файлов, как в вашем примере.Хорошее соглашение об именах (например, PSR-0 ) значительно упростит сопоставление имен классов с именами файлов.Начальная загрузка включает в себя создание файла, который вы включаете из всех ваших скриптов, который в свою очередь загружает такие вещи, как настройки конфигурации.Начальная загрузка - отличное место для настройки автозагрузки.Таким образом, ваш загрузчик загружает конфигурацию до загрузки остальной части приложения, и вы просто предполагаете, что она присутствует в другом месте вашего приложения.

0 голосов
/ 01 февраля 2012

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

0 голосов
/ 01 февраля 2012

Не зная, как организован ваш код, я бы сказал, использовать возможности автозагрузки PHP.(http://php.net/manual/en/language.oop5.autoload.php) При условии соблюдения правильных соглашений вы можете программно сопоставить имя класса с путем его загрузки. Или пройти по дереву каталогов, пока не будет найдено совпадение.

0 голосов
/ 01 февраля 2012

Может быть, вы можете использовать следующие сценарии:

$_SERVER['DOCUMENT_ROOT'];
$currentDirectory = array_pop(explode("/", getcwd()));

Но также лучше, чем этот, вы можете обратиться к этому вопросу: Как я могу получить "корень приложения" моего URL из PHP?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...