模型视图控制器-使用php获取父文件夹路径


model view controller - get parent folder paths with php

我正在开发我的第一个MVC框架,并希望为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/");

这个怎么样:

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()。并对定义常数进行重新排序,以便直接使用它们。但不确定它是否有助于可读性。

第一个:

realpath(__FILE__)

只是无用的

然而,没有"真正的"更好的方法,因为../不是"脏的"。唯一的其他解决方案,在我的脑海中出现

dirname(dirname(__FILE__))

..是文件系统(不是php发明的;(定义其父目录的方式,就像.定义当前目录一样。

这不应该在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/");