包括在内

时间:2014-07-28 15:21:14

标签: php dom

我的PHP代码有问题。

我有3个文件:

./foo1.php
<?php include './temp/foo2.php'; ?>
_________________________________________
./temp/foo2.php
<?php include '../php/print.php' ; ?>
_______________________________________
./php/print.php
<?php echo 'foo!'; ?>

当然如果我去./foo1.php什么都不打印(我想要'foo!')但是如果我去./temp/foo2.php'foo!'将被打印(没关系)。当PHP将以递归模式包含phpfiles时,问题将得到解决...我的问题是如何解决这个问题?

更新:这是解决方案:

$_SERVER['DOCUMENT_ROOT'] - &gt;

之前使用绝对路径

2 个答案:

答案 0 :(得分:5)

这不是因为PHP需要包含文件&#34;递归&#34;。来自documentation的评论:

  

请记住,如果文件A包含文件B,而B包含文件C; B中的包含路径应​​考虑到A,而不是B,是活动的工作目录。

您的工作目录为.,您通过../php/print.php包含foo2.php,但无法找到。顺便说一句,如果您检查日志,则会发出警告。

要正确解决此问题,请使用基本路径,从中包含所有内容,例如:

define("BASE", "/var/www/html");

include(BASE."/temp/foo2.php");
include(BASE."/php/print.php");

这样,您的代码也可以轻松重定位。

答案 1 :(得分:1)

PHP处理嵌套包含就好了。

问题在于您提供相对路径,并且当前目录中的路径(路径相对)根据您当时所处的文件而不会发生变化。

相对路径没有问题,多个入口点没有问题(即直接调用每个脚本)。如果您尝试混合使用这些有问题,而没有经过仔细检查。

如果您不需要多个入口点,则只需忘记直接调用除单个脚本之外的任何内容,并使路径相对于该脚本的目录。

如果确实需要多个入口点,那么每个脚本都必须以某种方式检测其在应用程序根目录中的位置,并相应地构建相对路径。