/或./ vs ../以及绝对和相对路径的问题

时间:2011-08-17 19:11:08

标签: php

我在

中有很多PHP文件
/
/client/
/user/
/config/
etc...

我希望我的所有文件都包含/user/codestart.php。 (很多功能等)

因此:

  • /中的所有文件都有include("./user/codestart.php");
  • /user/中的所有文件都有include("codestart.php");
  • /client/中的所有文件都有include("../user/codestart.php");

问题是/user/codestart.phpinclude("../config/config.php");(MySQL ID和密码)

/中的文件运行时,例如/index.php,它包含./user/codestart.php。 然后/user/codestart.php包含../config/config.php,但它无法看到它,因为它认为它是从/而不是/user/调用它。

如果我改变了 include("../config/config.php")include("./config/config.php") 它修复了/个文件,但会将其分解为/user//client/个文件。

一句话是,当一个PHP文件包含另一个文件时,PHP认为它是从原始文件的位置操作,而不是调用文件。

我需要使用相对路径,而不是绝对路径。绝对路径在我的情况下不起作用。

有什么方法可以解决这个问题吗?

5 个答案:

答案 0 :(得分:1)

如果你想这样做,我建议你为所有你的包含一个单独的文件,例如固定目录,例如根。

然后使用

可靠地包含那里的所有文件
include __DIR__.'path/relative/from/includefile.php'

如果您的php版本低于5.3,则应使用{strong> RiaD

提及的dirname(__FILE__)代替__DIR__

您可能希望this php.net page

答案 1 :(得分:1)

解决这个问题的一种方法是:

  • 拥有一个中央配置文件(例如/myproject/config/bootstrap.php

  • 在该配置文件中,为您的应用程序定义全局根目录。 E.g。

    define("APP_ROOT", realpath(dirname(__FILE__)."/.."));
    
  • 在每个PHP文件中包含该配置文件。 E.g。

    include("../config/bootstrap.php");
    
  • 每当您引用其他文件时,请使用

    include APP_ROOT."/includes/somefile.php";
    

Voilá - 你在空间中有一个固定的点(APP_ROOT)并且可以引用与此相关的所有内容,无论你在哪个目录中。

答案 2 :(得分:0)

您可以将相对路径与dirname(__FILE__

结合使用

所以在你的codestart文件中写:

require_once dirname(__FILE__).'/../config/config.php';

答案 3 :(得分:0)

使用绝对路径。要获取根目录的路径,请使用$_SERVER['DOCUMENT_ROOT'],例如

include $_SERVER['DOCUMENT_ROOT'].'/user/codestart.php';
include $_SERVER['DOCUMENT_ROOT'].'/config/config.php';

它可以帮助您避免绝对路径问题。

答案 4 :(得分:0)

您可以设置PHP用于查找文件的路径,以便它包含您的所有文件夹。在index.php

$folders = implode(PATH_SEPARATOR, array('user', 'config'));
set_include_path(get_include_path().PATH_SEPARATOR.$folders);

然后你可以这样做:

include("codestart.php");

include("config.php");

这适用于index.php以及index.php包含的所有文件。