这可能是一个非常简单的查询,但我对PHP require_once操作感到困惑。
我有一个网站,我们称之为www.mysite.com,在c:\websites\mysite.com\wwwroot\
在我的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网站中包含数据库连接字符串的最佳/正确方法是什么?
由于
答案 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_
,$_SERVER
,getcwd()
的帮助下对路径进行硬编码,如果您计划将代码库移动到其他框中,这将非常有效。
此外,最好使用params和all将您的数据库连接一次,并在所有应用程序中使用它,但您可能会在以后的开发路径中找到它。通常,您可以在connect_db();
或MyDB::Connect()
数据库文件之后随时拨打require
或include
。
希望有所帮助。