从多个位置需要PHP文件的问题

时间:2011-09-25 13:09:55

标签: php require

我在许多不同的php文件中都有一个PHP文件。

PHP文件存储数据库信息,还需要另一个名为something.php ....

的文件

现在,我说我在名为my_db_info.php的文件夹中存储了名为config的PHP文件(包含数据库信息)。

然后我有另一个PHP文件存储在config文件夹上方的两个文件夹中,名为all_functions。现在要求带有db info的文件我写require('folder1/config/my_db_info.php');现在这需要my_db_info.php正常但是my_db_info.php(something.php)中所需的文件将不会包含在内,这将导致致命的错误。 / p>

所以当我在all_functions文件夹中测试php时,我收到致命错误,告诉我无法找到实际db文件(my_db_info.php)中所需的文件(something.php)。 / p>

然后,当我更改my_db_info.php文件并更改需求行以减少其上升或下降的文件夹数量时,例如:

require('../something.php');

require('../../something.php');

似乎有效。但我必须将文件夹的上/下计数更改为主文件(在all_functions文件夹中)的内容。好像我在那个文件中要求something.php ......

这意味着,当我想要my_db_info.php到另一个文件时,该文件位于与all_functions文件夹(例如5个文件夹)中的文件完全不同的位置时,我将不得不制作另一个my_db_info.php使其正常工作....

为什么会发生这种情况,有什么办法可以解决这个问题吗?

由于

2 个答案:

答案 0 :(得分:1)

对我而言,对你来说,最简单的事情就是直接包含PHP文件而不是给出相对路径(这就是你如何包含它们)。

尝试使用$ _SERVER ['DOCUMENT_ROOT'](这会给你/ home / username / htdocs这样的东西)

如果我理解你的设置正确,你在目录中有以下2个目录(可能在根目录中):

/
/all_functions
/config

而不是包含多个include("../my_db_info.php");更改为include($_SERVER['DOCUMENT_ROOT']."/config/my_db_info.php");,并根据需要重复其他目录。

如果你这样做,它将适用于远离config + all_functions目录所在的多个目录。

修改(回复评论)

如果$_SERVER['DOCUMENT_ROOT']不可用,那么您可以随时手动编写文档根目录,然后将其定义为常量,然后在每个脚本中调用它。

例如

define(rootpath, "/home/username/htdocs");
include(rootpath."/config/my_db_info.php");

然后,如果需要,您可以在rootpath(等)中使用my_db_info.php作为已定义的常量,缺点是您必须在每个脚本中写入此内容 - 尽管手指越过$_SERVER['DOCUMENT_ROOT'] 1}}可供您使用。

答案 1 :(得分:0)

2021 年更新

现在我更喜欢将 namespaceautoload 一起使用,而不是传统的导入。

<?PHP

namespace Whatever;

class Important {...}
<?PHP

use App\Whatever;

$important = new Important();

https://www.php.net/manual/en/language.namespaces.php