我在
中有很多PHP文件/
/client/
/user/
/config/
etc...
我希望我的所有文件都包含/user/codestart.php
。 (很多功能等)
因此:
/
中的所有文件都有include("./user/codestart.php");
/user/
中的所有文件都有include("codestart.php");
/client/
中的所有文件都有include("../user/codestart.php");
问题是/user/codestart.php
有include("../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认为它是从原始文件的位置操作,而不是调用文件。
我需要使用相对路径,而不是绝对路径。绝对路径在我的情况下不起作用。
有什么方法可以解决这个问题吗?
答案 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
包含的所有文件。