получить пути к родительским папкам с помощью php - PullRequest
5 голосов
/ 07 апреля 2011

Я работаю над своей первой платформой MVC и хочу определить 4 константы для BASE_PATH, APP_PATH, LIB_PATH & PUBLIC_PATH.Моя файловая структура выглядит следующим образом:

/
/app
    /controllers
    /models
    /views
/config
/db
/lib
/public_html
    /css
    /js
    /img

Мой index.php файл находится в каталоге public_html .И в настоящее время имеет следующий код:

error_reporting(E_ALL);
define('BASE_PATH',dirname(realpath(__FILE__)) . "/../");
define('APP_PATH',dirname(realpath(__FILE__)) . "/../app/");
define('LIB_PATH',dirname(realpath(__FILE__)) . "/../lib/");
define('PUBLIC_PATH',dirname(realpath(__FILE__)) . "/");

require LIB_PATH . 'core.php';

Это работает, но я чувствую, что должен быть лучший способ сделать это без всех "..".Любые предложения или это лучший способ сделать это?Дай мне знать.Спасибо!


ОТВЕТ

Спасибо @fireeyedboy и @KingCrunch, я нашел решение, которое искал.Это мой окончательный код:

define('PUBLIC_PATH', dirname(__FILE__) . "/");
define('BASE_PATH', dirname(PUBLIC_PATH) . "/");
define('APP_PATH', BASE_PATH . "app/");
define('LIB_PATH', BASE_PATH . "lib/");

Ответы [ 3 ]

9 голосов
/ 07 апреля 2011

Как насчет этого:

define('PUBLIC_PATH',dirname(realpath(__FILE__)) . "/");
define('BASE_PATH',dirname(PUBLIC_PATH));
define('APP_PATH',BASE_PATH . "/app/");
define('LIB_PATH',BASE_PATH . "/lib/");

Другими словами, снова используйте dirname(). И изменить порядок определения констант, чтобы использовать их напрямую. Не уверен, что это помогает читабельности.

5 голосов
/ 07 апреля 2011

Первый:

realpath(__FILE__)

просто бесполезно

Тем не менее, нет «настоящего» лучшего способа, потому что ../ не «грязный». Единственное другое решение, которое приходит мне в голову

dirname(dirname(__FILE__))

.. - это способ, которым файловая система (не изобретенная php;)) определяет свой родительский каталог, . определяет текущий каталог.

0 голосов
/ 07 апреля 2011

это не должно быть в index.php .. оно должно быть в папке config /, а PUBLIC_PATH совпадает с BASE_PATH ... И мне не нравится использовать функции dirname и realpath, я простонаписать правильный путь вручную (но это только я)

define('BASE_PATH',dirname(realpath(__FILE__)) . "/../");
define('APP_PATH',BASE_PATH . "app/");
define('LIB_PATH',BASE_PATH . "lib/");
...