您如何为开发人员设置模板路径?

时间:2011-04-22 16:47:13

标签: php include-path

我想如果我能做得更好,我会问。

在我的本地(WAMP)我的所有网站都在www文件夹中。 (C:\wamp\www

现在我在包含文件时执行此操作:

require_once("".$_SERVER['DOCUMENT_ROOT']."/lib/config.php");

当我在本地工作并将网站上传到网站主机时,我想确保路径不会中断

有人可以告诉我,我是否应该这样做?

我想确保最大程度的兼容性;例如,如果我将站点从本地移动到我决定使用的任何Web主机,或者例如,我从一个主机移动到另一个主机,则意味着路径不会中断。

也许还有一种防弹方式可以做到这一点?

4 个答案:

答案 0 :(得分:2)

使用$_SERVER['DOCUMENT_ROOT']的问题在于,如果将PHP脚本上下移动到目录级别,它将会中断。而是使用它:

require_once(dirname(__FILE__) . "/lib/config.php");

__FILE__是脚本的绝对路径。 dirname()删除最后一个路径组件(脚本文件名),以便您可以向其添加其他路径组件,例如/lib/config.php/../../lib/config.php或其他。这将适用于所有地方。

PHP 5.3引入了dirname(__FILE__)的简写,称为__DIR__,但这在< 5.3中不起作用。

答案 1 :(得分:2)

你应该看到Include path。因为set_include_path很有用。

答案 2 :(得分:1)

这适用于包含配置文件(虽然我会删除开头的引号)

require_once( $_SERVER['DOCUMENT_ROOT'] . "/lib/config.php" );

如果您从一堆不同的目录中包含配置文件,这实际上是唯一的方法。

在更大的项目ID上说“大多数”开发人员都有一个front controller来加载所有脚本。这个前端控制器加载配置文件,因为它的同一个文件总是包含配置文件,所以不需要$_SERVER['DOCUMENT_ROOT']

答案 3 :(得分:1)

我通常做的是使用一些非常基本的常量制作1个配置文件(可能包含其他文件):

define('PROJECT_ROOT', dirname(dirname(__FILE__))); // or dirname(__DIR__) for PHP 5.3
define('PROJECT_WEB', $_SERVER['DOCUMENT_ROOT']);
// etc

我的其他文件/包含将基于那些非常简单的常量。我永远不需要相对路径,也不需要include_path,因为PROJECT_ROOTPROJECT_WEB都是'真实'/绝对。

其他有用(?)常量为PROJECT_LOGIC和/或PROJECT_CONTROLLERS和/或PROJECT_3RD_PARTY等。