【问题标题】:get parent folder paths with php用php获取父文件夹路径
【发布时间】:2011-07-31 18:20:38
【问题描述】:

我正在开发我的第一个 MVC 框架,并希望为 BASE_PATH、APP_PATH、LIB_PATH 和 PUBLIC_PATH 定义 4 个常量。我的文件结构如下:

/
/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/");

【问题讨论】:

    标签: php model-view-controller oop include-path


    【解决方案1】:

    第一:

    realpath(__FILE__)
    

    只是没用

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

    dirname(dirname(__FILE__))
    

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

    【讨论】:

    • 您能否详细说明一下您为什么说“realpath(__FILE__) 只是没用”?
    • @Yevgeniy:因为__FILE__ 始终是绝对的,而且因为它是写入文件的文件名,所以它指向的文件肯定存在。 realpath(__FILE__) == __FILE__
    【解决方案2】:

    这个怎么样:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 虽然我理解在 config/ 文件夹中的文件中定义路径背后的逻辑,但我在其他示例和教程中看到过这种方式(在 index.php 中)。因为我只会在一个文件中定义一次,所以我觉得这是合适的。我将所有应用程序文件存储在公用文件夹之外,以防止任何潜在的未经授权的访问。所以在我的例子中:BASE_PATH = "/" & PUBLIC_PATH = "/public_html/"
      • 你是对的,但 FILE 在每个 PHP 版本中的工作方式不同。在遇到一些问题之后,我决定只使用一个字符串会更开心......现在我通常有很多配置文件,我在其中定义所有应用程序的常量,其中一个文件具有所有常量当我在不同的服务器上发布项目时发生更改,并且包含它们的主配置文件..所以如果出于任何原因有人必须添加、删除或修改常量,他会知道常量在该文件夹中..但是你知道,这只是一个选择 =)
      • 我刚刚做了一些研究,看起来你是对的,但我会坚持我的方式 :) 以防万一有人好奇 __FILE__ 定义直接形式 php.net "@987654323 @"
      猜你喜欢
      • 2019-07-13
      • 1970-01-01
      • 2011-07-27
      • 2023-04-07
      • 2011-10-29
      • 2019-01-23
      • 2015-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多