我的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;
答案 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处理嵌套包含就好了。
问题在于您提供相对路径,并且当前目录中的路径(路径相对)根据您当时所处的文件而不会发生变化。
相对路径没有问题,多个入口点没有问题(即直接调用每个脚本)。如果您尝试混合使用这些做有问题,而没有经过仔细检查。
如果您不需要多个入口点,则只需忘记直接调用除单个脚本之外的任何内容,并使路径相对于该脚本的目录。
如果确实需要多个入口点,那么每个脚本都必须以某种方式检测其在应用程序根目录中的位置,并相应地构建相对路径。