【问题标题】:PHP require_once above the rootPHP require_once 高于根
【发布时间】:2014-10-21 05:17:12
【问题描述】:

这可能是一个非常简单的查询,但是我被 PHP 的 require_once 操作弄糊涂了。

我有一个网站,我们称之为 www.mysite.com,运行在文件夹 c:\websites\mysite.com\wwwroot\ 中的 IIS 服务器上

在我的 www.mysite.com/index.php 中,我需要一个 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 require_once("../common/includes.php")。到目前为止还好...

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

我做错了什么?

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

谢谢

【问题讨论】:

    标签: php


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      然后在您的所有文件中:

      require_once(DBINCLUDE);
      

      你可以对你的函数和公共做同样的事情。您可以对路径进行硬编码或借助_FILE_$_SERVERgetcwd(),如果您打算将代码库移动到其他框,这将非常有用。

      此外,使用其参数和所有参数建立数据库连接并在所有应用程序中使用它是一个好主意,但您可能会在以后的开发路径中发现这一点。通常,有一个connect_db();MyDB::Connect(),您可以在requireinclude 您的数据库文件之后随时调用。

      希望对您有所帮助。

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

      【讨论】:

      • 感谢您的回复 - 我将使用此方法。我希望能够使用我的包含文件在一个地方执行所有 require_once 请求(而不是在每个页面上重复代码)...
      猜你喜欢
      • 2016-08-31
      • 2012-01-15
      • 2013-03-27
      • 1970-01-01
      • 2016-02-27
      • 2018-10-19
      • 2011-02-08
      • 2013-12-03
      • 2011-10-02
      相关资源
      最近更新 更多