用php获取父文件夹路径

Yev*_*Yev 5 php oop model-view-controller include-path

我正在研究我的第一个MVC框架,并希望为BASE_PATH,APP_PATH,LIB_PATH和PUBLIC_PATH定义4个常量.我的文件结构如下所示:

/
/app
    /controllers
    /models
    /views
/config
/db
/lib
/public_html
    /css
    /js
    /img
Run Code Online (Sandbox Code Playgroud)

我的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';
Run Code Online (Sandbox Code Playgroud)

这是有效的,但我觉得必须有一个更好的方法,没有所有的"..".任何建议或这是最好的方式吗?让我知道.谢谢!


回答

感谢@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/");
Run Code Online (Sandbox Code Playgroud)

Dec*_*ler 9

这个怎么样:

define('PUBLIC_PATH',dirname(realpath(__FILE__)) . "/");
define('BASE_PATH',dirname(PUBLIC_PATH));
define('APP_PATH',BASE_PATH . "/app/");
define('LIB_PATH',BASE_PATH . "/lib/");
Run Code Online (Sandbox Code Playgroud)

换句话说dirname()再次使用.并重新定义常量以直接使用它们.不确定它有助于提高可读性.


Kin*_*nch 5

第一:

realpath(__FILE__)
Run Code Online (Sandbox Code Playgroud)

只是没用

但是,没有"真正的"更好的方法,因为../不是"脏".我想到的唯一的其他解决方案

dirname(dirname(__FILE__))
Run Code Online (Sandbox Code Playgroud)

..文件系统(它不是由php发明;))定义其父目录的方式,也.定义了当前目录.

  • @Yevgeniy:因为`__FILE__`总是绝对的,因为它是写入文件的文件名,它指向的文件肯定存在.`realpath(__ FILE__)== __FILE__` (3认同)