如何在大型PHP项目中维护一致的目录范围?

时间:2014-05-06 18:12:33

标签: php include directory directory-structure

我是一个相对较新的开发者,我正在处理我的第一个"大"网站。我希望在整个项目中都有一个持久的目录范围,以便于开发。这就是我的意思:

假设我有一个(简化的)目录结构如下:

Site Root/
  index.php
  js/
  css/
  img/
  classes/
  includes/

如果我在index.php工作并想include()来自Classes/的文件,那就很简单了:

include('classes/user.php');

但是,如果我深入内部,比如说包含文件夹并想要包含一个类,那就太乱了:

include('../../../classes/user.php');

最理想的是,我希望能够在任何文件中说出include('classes/user.php');

我可以采取哪些措施使我的目录结构尽可能简单易用?我想某种包括在每个存储根目录相对于当前目录的页面上并将其保存到字符串中,但是我不确定最好的方法是什么

编辑:不确定为什么这被标记为"太宽广"?我认为我所要求的是非常具体的,但如果不是这样,请赐教我。

1 个答案:

答案 0 :(得分:0)

首先,在使用__DIR__includes()时,请始终向我们尝试requires() magic constant,因为缺少它有时会导致错误,并且可以找到错误的脚本更容易。

就调用脚本而言,应该使用具有根路径的常量。像这样:

// Value is something like '/var/www'
define('PATH_BASE', __DIR__, 1);
// Value is '/var/www/system/'
define('PATH_SYS', PATH_BASE.'/system/', 1);
// Value is '/var/www/assets/css/'
define('PATH_CSS', PATH_BASE.'/assets/css/', 1);
// Value is '/var/www/assets/js/'
define('PATH_JS', PATH_BASE.'/assets/js/', 1);

// Will always get '/var/www/system/core.php' no matter where it is called
require (PATH_SYS.'core.php');

这可能是最简单,最有效的方法,但远非唯一的方法。请记住__DIR__使用调用它的文件的基本路径,而不是请求的文件。

因此,如果请求的文件是" http://example.com/index.php" (又名' /var/www/index.php'),但{/ 1}}在' /var/www/system/core.php' ;; __DIR__的值为' / var / www / system'