嵌套的php包含到服务器路径

时间:2011-07-29 17:04:49

标签: php include

我在工作中遇到了一些乱七八糟的文件系统,试图编写它会让我发疯。希望有人可以提供帮助。首先,一些背景知识。

我们在两个不同的服务器上有多个域(一个是Windows,另一个是Linux)。目标是构建一个可以包含在任何域中的表单。我们已经有了这个表单的两个副本,每个服务器上有一个副本,并使用服务器绝对路径来包含form.php文件(包括“/etc/www/formhostingdomain/form.php”;并包含“D” :\ www \ formhostingdomain2 \ form.php“例如)。就像我说的,这部分有效。

现在我遇到的问题是form.php文件需要动态地包含来自同一文件夹的更多文件。我尝试过相对引用,以及服务器绝对路径,但是我似乎无法让它工作。单个服务器绝对包含在form.php内部(例如包括'D:\ www \ formhostingdomain2 \ formextras.php';)有效,但如果我尝试类似

$server_path = "D:\\www\\formhostingdomain2\\";
include $server_path."formextras.php";

然后我无法正确包含它。我需要能够将服务器路径移动到单个变量中,因为整个文件中有太多的包含可以维护。我试过用单引号和双引号,单,双,甚至四重反斜杠,以及正斜杠,都无济于事。我还在http://php.net/manual/en/language.types.string.php阅读了文档,但这对我的情况没有任何启发。我确信我只缺少一些微妙的东西。

1 个答案:

答案 0 :(得分:1)

这要解决你的问题:

include dirname(__FILE__)."/formextras.php";

__FILE__是一个神奇的常量,包括当前文件的完整文件名和路径。 dirname设置路径,因此现在form.php完全相同(不需要知道form.php目前在哪里)...从这里你可以上去(..)或向下(包括/)树,或只是引用同一文件夹中的另一个文件。

值得注意的是,默认情况下,include / require始终相对于当前正在执行的页面。如果form.php被直接访问(不包含在其他页面中),那么您可以说include "formextras.php";这意味着formextras.php必须位于同一目录中,或include "includes/formextras.php";意味着{{1}子目录中包含来自formextras.php的子目录。

这是一种祝福和诅咒,如果您的form.php包含index.php,其中包含form.php,那么formextras.php中的亲戚来自form.php } index.php ... form.php解决了这个问题。

更新PHP 5.3 +

正如您所指出的,PHP 5.3引入了一个名为__DIR__的新魔术常量,它报告与dirname(__FILE__)相同...如果您可以保证在任何地方都安装了5.3,那么它就是一个更清洁的解决方案。