PHP - лучший способ использовать вышеуказанный каталог включает - PullRequest
1 голос
/ 27 июня 2011

У меня проблемы с тем, что некоторые части моего веб-сайта обращаются к некоторым файлам из разных корней, и конец включений иногда выглядит так:

require_once ('../eggs/libs/lagger/lagger_config.php');
require_once ('../eggs/libs/lagger/lagger_init.php');

и иногда так:

require_once("../libs/lagger/lagger_config.php");
require_once("../libs/lagger/lagger_init.php");

Есть ли лучший способ решить эту проблему без использования:

../../

Ответы [ 7 ]

2 голосов
/ 27 июня 2011

Если у вас есть файл, который запускается для каждого запроса (например, фронт-контроллер), вы можете сделать что-то вроде этого:

define('APP_PATH', realpath(dirname(__FILE__)));

Тогда в ваших индивидуальных скриптах:

require_once APP_PATH . '/library/whatever.php';
1 голос
/ 27 июня 2011

Относительные пути, как вы делаете, являются стандартным способом включения файлов, как вы.

Если вам это не нравится, у меня есть несколько проектов, в которых я определяю 'INCLUDES_FOLDER' для абсолютного пути.

Так что ваши включения станут

require_once(INCLUDES_FOLDER."/libs/lagger/lagger_config.php");
require_once(INCLUDES_FOLDER."/libs/lagger/lagger_init.php");
1 голос
/ 27 июня 2011

Лучший способ - получить базовый каталог, т. Е.

define("ROOT",$_SERVER["DOCUMENT_ROOT"]);
define("LAGGER",ROOT."/lagger/"):

тогда:

require_once(LAGGER."lagger_config.php");
require_once(LAGGER."lagger_init.php");

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

1 голос
/ 27 июня 2011
set_include_path('../eggs/libs/lagger/');

require_once("lagger_config.php");
require_once("lagger_init.php");

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

С другой стороны, если ваш скрипт имеет доступ к корневому каталогу, вы можете определить путь включения как {root}/eggs/libs/lagger/ (где {root} - это путь к корню) и просто установить его один раз, без использования относительных путей. .

0 голосов
/ 27 июня 2011
ini_set('include_path', ini_get('include_path') . ':/path/to/eggs/libs'));

Поместите это в верхнюю часть скрипта, прежде чем делать какие-либо включения, избавит вас от необходимости делать пути в каждом вызове include / require.

В качестве альтернативы вы можете изменить include_path на уровне php.ini, чтобы он был постоянным для всех сценариев.

0 голосов
/ 27 июня 2011

Ну, вы можете определить некоторые константы, которые вы можете использовать на своем сайте:

<?php

   define("ABS_PATH", '../');
   define("DBL_ABS_PATH", '../../');

   //used in code:

   require_once (ABS_PATH.'eggs/libs/lagger/lagger_config.php');
   //and:
   require_once(DBL_ABS_PATH."libs/lagger/lagger_init.php");

?>
0 голосов
/ 27 июня 2011

Это либо это, либо набор абсолютных путей.

...