php包含基于文件的路径更改

php包含基于文件的路径更改,php,include,Php,Include,我是php的新手,我正在尝试使用我网站中的一些include,但我不太明白如何让它们都正常工作。 我的网站结构如下 /ROOT/ Config.php Index.php /ADMINISTRATION/ Index.php mustInclude.php /USERS/ Index.php 如果“mustInclude.php”包含“Config.php”,Index.php包含“mustInclude.php”,一切正

我是php的新手,我正在尝试使用我网站中的一些include,但我不太明白如何让它们都正常工作。 我的网站结构如下

/ROOT/
   Config.php
   Index.php
   /ADMINISTRATION/
      Index.php
      mustInclude.php
      /USERS/
         Index.php
如果“mustInclude.php”包含“Config.php”,Index.php包含“mustInclude.php”,一切正常,但只要我尝试将“mustInclude.php”包含到/USERS/Index.php中,它就会中断,因为“mustInclude.php”使用的路径类似于
include'../Config.php'
并且/USERS/Index.php的相对路径与/ADMINISTRATION/Index.php的相对路径不同

我真的不知道该怎么办

这是在我的本地机器上。使用
$\u服务器['DOCUMENT\u ROOT']
会给我带来错误,因为它输出的是我的文件结构(/Users/James/Sites),而不是我的web结构()


帮助?

我建议定义某种“全局基本路径”,并从中推断出其他路径。像

define('BASE_PATH', '/home/me/');
...
include(BASE_PATH . 'Config.php');
include(BASE_PATH . 'subdirectory/other.php');

等等。这种(半)绝对路径比包含大量
。/
s的相对路径更脆弱。(这并不是说相对路径有什么根本性的错误,但它们更难做到恰到好处,而且更容易出错。如果
/a
包括
b/c
b/c
包括
。/d/e
,那么这是相对于
/b//code>还是相对于
//code>,这取决于我们是从om
/a
与直接调用
b/c
相比?我甚至不知道。最好使用绝对路径,它们简单明了:-)。

而不是使用“../config.php”,尝试使用

dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'config.php'

通过这种方式,您将始终知道当前文件的上一个级别就是上一个级别。

您可以使用
\uuuuuuuuuuu
在您的应用程序目录结构中的任何位置包含文件的最佳方法是将应用程序的根文件夹添加到PHP包含路径:

<?php
set_include_path(get_include_path().PATH_SEPARATOR."/Users/James/Sites/app_name");

我不确定这是不是最好的方法。这可能会导致潜在的歧义,因为像“ADMINISTRATION/USERS/Index.php”这样的名称不是完全限定的。您可以将“/a/x.php”和“/b/x.php”-放置“/a/”和“/b/”到include路径,并猜测x“include'x.php”指的是哪一个x…您能再解释一下吗?我需要从哪里运行此代码?每个包含的文件?一旦进入我的index.php?Pselus:每次运行脚本都需要这样做,因为它不会永久性地更改未来脚本的include路径。Joonas:这实际上不是一个问题,除非您已经在php.ini中的include_path变量中设置了其他应用程序。例如,如果PEAR位于include路径上,那么您只需避免将目录命名为与PEAR模块相同的名称,这无论如何都是愚蠢的。诚然,这可能不是一个大问题,但是有一些PEAR包具有非常通用的名称,如“Cache”、“File”和“Log”。我宁愿不记得我不应该命名的目录。有人愿意解释为什么这张海报被否决了吗?我真的很想了解php的好的一面和坏的一面。我想它被否决是因为它的简洁。使用“文件”?这是怎么一回事?如何使用它?基本上,这个答案(可能)与上面Aprikot的答案相同,但描述得相当糟糕。很抱歉,我没有时间写一篇完整的文章,但它是在上面Aprikot的答案之前发布的,这是正确的答案。
<?php
require_once('ADMINISTRATION/USERS/Index.php');