如何消除冗长的相对包含路径

时间:2012-01-31 22:29:28

标签: php directory-structure

是否有一个受欢迎的方法来指定您的网站/应用程序的根文件夹,而不必诉诸这样的代码:

require '../../../../config/settings.php';

之前我使用过各种方法,我正在考虑的是在我的主机上设置一个环境变量,这样我就可以这样做了:

require getenv('PROJECT_ROOT') . '/config/settings.php';

但这对于有一个项目的系统来说真的是可行的,而且还有其他各种缺点,所以我想知道是否有更好的方法?

4 个答案:

答案 0 :(得分:3)

如果您想要查看环境变量路径,可以从Apache vhost设置环境变量。查看Apache文档中的SetEnvSetEnvIf。例如为给定apache vhost的所有传入请求提供环境变量:

SetEnv PROJECT_ROOT='/path/to/my/project'

e.g。要根据主机名更改环境变量的值:

SetEnvIf Host www.example.com PROJECT_ROOT='/path/to/example/com'
SetEnvIf Host www.example.org PROJECT_ROOT='/path/to/example/org'

其他选项包括自动加载和自举。 Autoloading适用于类,但不适用于您的示例之类的配置文件。良好的命名约定(例如PSR-0)将使类名称映射到文件名更加容易。 Bootstrapping涉及创建一个文件,您可以从所有脚本中包含这些文件,然后加载配置设置等内容。引导程序是设置自动加载的好地方。这样你的引导程序会在加载其他应用程序之前加载配置,而你只是认为它存在于你应用程序的其他地方。

答案 1 :(得分:0)

也许您可以使用以下脚本:

$_SERVER['DOCUMENT_ROOT'];
$currentDirectory = array_pop(explode("/", getcwd()));

但也比你更好,你可以参考这个问题:How can I get the "application root" of my URL from PHP?

答案 2 :(得分:0)

您可能希望使用引导程序加载所需的必要文件,以便后续文件只需要引导程序文件。

答案 3 :(得分:0)

在不知道您的代码是如何组织的情况下,我会说使用PHP的自动加载功能。 (http://php.net/manual/en/language.oop5.autoload.php)如果遵循正确的约定,您可以以编程方式将类名映射到从中加载它的路径。或者遍历目录树,直到找到匹配项。