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

时间:2009-11-07 20:47:52

标签: php include

我是php的新手,我正在尝试使用我的网站中的一些包含,并且无法弄清楚如何使它们全部正常工作。 我的网站结构如下

/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

我不确定该怎么做。

现在这是在我的本地机器上。使用$_SERVER['DOCUMENT_ROOT']给出错误,因为它输出我的文件结构(/ Users / James / Sites)而不是我的网络结构(http://localhost/mysite

帮助?

4 个答案:

答案 0 :(得分:4)

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

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

等等。这种(半)绝对路径比包含大量../ s的相对路径更不易碎。 (并不是说相对路径有任何根本性的错误,但是它们更难以恰到好处而且更容易破坏。如果/a包括b/cb/c包含{{ 1}},是相对于../d/e还是相对于/b/,还是取决于我们是直接从/还是从/a开始?我不是甚至知道。最好只使用绝对路径,它们很容易且毫不含糊: - )。

答案 1 :(得分:4)

IMO从应用程序目录结构中的任何位置包含文件的最佳方法是将应用程序的根文件夹添加到PHP包含路径中:

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

然后,只使用相对于应用程序根文件夹的路径包含文件,例如:

<?php
require_once('ADMINISTRATION/USERS/Index.php');

答案 2 :(得分:2)

不要使用'../config.php'尝试使用

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

这样你就会知道上面的一个级别是当前文件的一个级别。

答案 3 :(得分:-1)

您可以使用__FILE__