Лучший способ для PHP5 CLI сформулировать базовый каталог? - PullRequest
0 голосов
/ 02 февраля 2010

Хорошо, скажите, что у меня есть кодовая база, которая содержится в папке / myProgram / и имеет различные папки, такие как / myProgram / lib /, / myProgram / docs / и так далее ...

Как в PHP я могу обнаружить любые папки перед / myProgram / и создать базовую переменную, чтобы мои включения и требования могли быть записаны относительно базового каталога / myProgram /, позволяя мне помещать myProgram во что угодно, например в root , мой домашний каталог, / path / to / myProgram / и т. д.?

Не нужно работать в Windows, только среда * nix. Это все из анализатора командной строки или исполняемых скриптов.

Ответы [ 2 ]

0 голосов
/ 03 февраля 2010

Вот как я это сделал ... Именно то, что я хотел! Понял это после некоторой игры с моей Программой.

// START Directory Bootstrap
$location = dirname(__FILE__);
$rootLoc = strpos($location, "myProgram");
if($rootLoc === FALSE)
    die("WARNING! myProgram Root Directory Not Found!\n");
$root = substr($location, 0, $rootLoc);
$root .= "myProgram";
// Change Directory for working includes and requires.
chdir($root);

Определяет, где находится скрипт запуска, а затем пытается найти базовый каталог. Если он не может найти основную «myProgram», я предполагаю, что скрипт был размещен в неправильном месте и должен завершиться неудачей В противном случае он создает подстроку всего, вплоть до myProgram, а затем привязывает myProgram в конце. Наконец, мы меняем каталоги, чтобы включить и требовать включения, такие как ...

include_once("config/serverSettings.php");
require_once("config/mySQLSettings.php");

Легальные команды. Это то, что я искал, и я решил загрузить его, чтобы другие могли его увидеть.

0 голосов
/ 02 февраля 2010

Я бы предложил использовать относительные пути из текущего файла следующим образом:

include (dirname(__FILE__).'/../includes/something.inc.php');

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

Вы также можете сделать что-то похожее на это:

 // In MyProgram/includes/config.php for instance:
 define("BASE_DIR", realpath(dirname(__FILE__).'/../..');

И тогда вы можете использовать следующее:

 include(BASE_DIR.'/includes/class.php');

Я бы настоятельно рекомендовал против любого решения, которое включает жесткое кодирование имени каталога, в котором находится ваше приложение.

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