PHP require_once高于root

时间:2014-08-27 14:46:19

标签: php

这可能是一个非常简单的查询,但我对PHP require_once操作感到困惑。

我有一个网站,我们称之为www.mysite.com,在c:\websites\mysite.com\wwwroot\

文件夹中的IIS服务器上运行

在我的www.mysite.com/index.php中,我require_once一个includes.php,它位于一个名为common的文件夹中 - 所以require_once("../common/includes.php");

在这个includes.php中是我的数据库连接文件的require_once - 它位于根目录之上 - c:\websites\mysite.com\ 因此,在includes.php,我require_once("dbase_connection.php");

在服务器的每个文件夹中,我有一个名为dbase_connection.php的文件,其中包含1行 - require_once("../dbase_connection.php");

这有效......

现在,我在名为“admin”的文件夹中设置了一个简单的CMS。在www.mysite.com/admin/index.php中,我还要求require_once("../common/includes.php")。到目前为止很好......

理论上,如果我在\admin\index.php,那么要求dbase_connection.php应该上去目录结构,直到它找到具有连接字符串的最终dbase_connection.php - 但它没有“T

我做错了什么?

更好的查询可能是,在程序php网站中包含数据库连接字符串的最佳/正确方法是什么?

由于

2 个答案:

答案 0 :(得分:0)

嵌套require_once()的路径始终相对于包含require_once()的被调用/第一个文件进行评估。所以这就是为什么它不适合你。要解决此问题,您必须指定从首次调用require_once()的文件开始的相对路径。

您还可以在 php.ini 中维护include_path或使用set_include_path()see documentation

答案 1 :(得分:0)

您应该尝试制作一个包含在每个文件中的config.php文件,即定义的路径。在其中,您应该为应用程序的数据库连接的路径定义一些常量:

define('DBINCLUDE', '/path/to/include/db.php');

然后在你的所有文件中:

require_once(DBINCLUDE);

你可以为你的功能和公共做同样的事情。您可以在_FILE_$_SERVERgetcwd()的帮助下对路径进行硬编码,如果您计划将代码库移动到其他框中,这将非常有效。

此外,最好使用params和all将您的数据库连接一次,并在所有应用程序中使用它,但您可能会在以后的开发路径中找到它。通常,您可以在connect_db();MyDB::Connect()数据库文件之后随时拨打requireinclude

希望有所帮助。

请参阅http://php.net/manual/en/function.require-once.php