Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php获取父文件夹路径_Php_Model View Controller_Oop_Include Path - Fatal编程技术网

使用php获取父文件夹路径

使用php获取父文件夹路径,php,model-view-controller,oop,include-path,Php,Model View Controller,Oop,Include Path,我正在开发我的第一个MVC框架,希望为基本路径、应用路径、库路径和公共路径定义4个常量。我的文件结构如下所示: / /app /controllers /models /views /config /db /lib /public_html /css /js /img 我的index.php文件位于public\u html目录中。目前拥有以下代码: error_reporting(E_ALL); define('BASE_PATH',dirna

我正在开发我的第一个MVC框架,希望为基本路径、应用路径、库路径和公共路径定义4个常量。我的文件结构如下所示:

/
/app
    /controllers
    /models
    /views
/config
/db
/lib
/public_html
    /css
    /js
    /img
我的index.php文件位于public\u 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/");
第一:

没用

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

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

这样如何:

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

这不应该在index.php中。。它应该在config/文件夹中,并且公共路径与基本路径相同。。。我不喜欢使用dirname和realpath函数,我只是手动编写正确的路径(但那只是我自己)


你能详细解释一下为什么你说“
realpath(\uuuuu FILE\uuuu)
没用吗”@Yevgeniy:这是因为
\uuuu FILE\uuuuuu
总是绝对的,因为它是它所写文件的文件名,它指向的文件肯定存在
realpath(_FILE__)==_FILE__
虽然我理解在config/文件夹中定义文件路径背后的逻辑,但我在其他示例和教程中看到过这种方式(在index.php中)。因为我只在一个文件中定义一次,所以我觉得这是合适的。我将所有应用程序文件存储在公用文件夹之外,以防止任何潜在的未经授权的访问。所以在我的例子中:BASE_PATH=“/”&PUBLIC_PATH=“/PUBLIC_html/”您是对的,但文件并不是在每个PHP版本中都以相同的方式工作。在遇到一些问题后,我决定只使用一个字符串会更快乐。。。现在,我通常有许多配置文件,其中我为所有应用程序定义了常量,其中一个文件包含在不同服务器上发布项目时更改的所有常量,以及包含这些常量的主配置文件。。因此,如果出于任何原因,有人必须添加、删除或修改常量,他将知道常量位于该文件夹中。。但是你知道,这只是一个选择=)我只是做了一些研究,看起来你是对的,但我会坚持我的方式:)以防万一有人好奇
\uuu文件\uuu
定义直接表单php.net“
文件的完整路径和文件名。如果在包含中使用,则返回包含文件的名称。由于PHP4.0.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/");
define('BASE_PATH',dirname(realpath(__FILE__)) . "/../");
define('APP_PATH',BASE_PATH . "app/");
define('LIB_PATH',BASE_PATH . "lib/");