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


How do you developers set your paths for templates?

我想我应该问一下,如果我有更好的方法。

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

现在,当我包含一个文件时,我会这样做:

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

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

谁能告诉我我是否应该这样做?

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

也许有更万无一失的方法?

使用$_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中不起作用。

您应该看到包含路径。set_include_path是有用的

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

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都是'real'/absolute。

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

对于包含配置文件(尽管我会去掉开头的引号)

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

如果你从不同的目录中包含配置文件,这真的是唯一的方法。

在更大的项目中,我会说"大多数"开发人员都有一个前端控制器,所有脚本都是从那里加载的。这个前端控制器加载配置文件,因为它总是包含配置文件,所以不需要$_SERVER['DOCUMENT_ROOT']