【问题标题】:Including config file in PHP在 PHP 中包含配置文件
【发布时间】:2013-05-13 11:11:33
【问题描述】:

我正在开发一个无法包含文件的项目。

我的文件夹结构:

--Myproject
-----Config
----------config.php
-----Includes
----------Images
---------------image.jpg
----------CSS
---------------test.css
----------JS
---------------test.js
-----Modules
----------Home
---------------index.php
----------Contact 
----------MyPage

我正在尝试访问我的 Modules/Home/index.php 中的 Config/config.php 中的配置文件

但我无法包含配置文件?

我试过了:

1.
define("ROOT", __DIR__ ."/");

2.
define("HTTP", ($_SERVER["HTTP_HOST"] == "localhost")
   ? "http://localhost/myproject/"
   : "http://your_site_name.com/"
);
<img src="<?php print HTTP; ?>images/banner.gif">

3.
define('PROJECT_ROOT', getcwd());

4.
$_SERVER['DOCUMENT_ROOT'];

Ref: [link][2]

5.
echo $_SERVER['SERVER_NAME'];

我怎样才能喜欢在文件夹结构之外但在我的项目中的 config.php?

【问题讨论】:

  • 在创建文件路径字符串时应始终使用 PHP 内置常量 DIRECTORY_SEPARATOR。
  • 一旦文件被链接,我将使用各种内置函数。

标签: php configuration include configuration-files include-path


【解决方案1】:

你可以做的就是在你的 index.php 路径中包含以下几行:

define("LOCAL_PATH_MODULES", dirname(__DIR__));
define("LOCAL_PATH_APP", dirname(LOCAL_PATH_MODULES));
define("LOCAL_PATH_CONFIG", MODULES_PATH . DIRECTORY_SEPARATOR . 'config');
require LOCAL_PATH_CONFIG . DIRECTORY_SEPARATOR . 'config.php';

您应该做的是将名为bootstrap.php 的文件放入您的Modules 文件夹中。

将以下代码添加到您的索引文件中,而不是上面的代码。

define("LOCAL_PATH_BOOTSTRAP", dirname(__DIR__));
require dirname(__DIR__) . 'bootstrap.php';

现在,将其添加到您的引导文件中:

// -----------------------------------------------------------------------
// DEFINE SEPERATOR ALIASES
// -----------------------------------------------------------------------
define("URL_SEPARATOR", '/');
define("DS", DIRECTORY_SEPARATOR);
define("PS", PATH_SEPARATOR);
define("US", URL_SEPARATOR);

// -----------------------------------------------------------------------
// DEFINE ROOT PATHS
// -----------------------------------------------------------------------
define("RELATIVE_PATH_ROOT", '');
define("LOCAL_PATH_ROOT", $_SERVER["DOCUMENT_ROOT"]);
define("HTTP_PATH_ROOT",
        isset($_SERVER["HTTP_HOST"]) ?
        $_SERVER["HTTP_HOST"] : (
        isset($_SERVER["SERVER_NAME"]) ?
        $_SERVER["SERVER_NAME"] : '_UNKNOWN_'));

// -----------------------------------------------------------------------
// DEFINE RELATIVE PATHS
// -----------------------------------------------------------------------
define("RELATIVE_PATH_APP", dirname(LOCAL_PATH_BOOTSTRAP));
define("RELATIVE_PATH_LIBRARY", RELATIVE_PATH_APP . DS . 'Lib');
define("RELATIVE_PATH_ADMIN", RELATIVE_PATH_APP . DS . 'Admin');
define("RELATIVE_PATH_CONFIG", RELATIVE_PATH_APP . DS . 'Config');
define("RELATIVE_PATH_MODULES", RELATIVE_PATH_APP . DS . 'Modules');
define("RELATIVE_PATH_ASSET", RELATIVE_PATH_APP . DS . 'Includes');
define("RELATIVE_PATH_ASSET_IMG", RELATIVE_PATH_ASSET . DS . 'Images');
define("RELATIVE_PATH_ASSET_CSS", RELATIVE_PATH_ASSET . DS . 'CSS');
define("RELATIVE_PATH_ASSET_JS", RELATIVE_PATH_ASSET . DS . 'JS');

// -----------------------------------------------------------------------
// DEFINE LOCAL PATHS
// -----------------------------------------------------------------------
define("LOCAL_PATH_APP", LOCAL_PATH_ROOT . RELATIVE_PATH_APP);
define("LOCAL_PATH_LIBRARY", LOCAL_PATH_ROOT . RELATIVE_PATH_LIBRARY);
define("LOCAL_PATH_ADMIN", LOCAL_PATH_ROOT . RELATIVE_PATH_ADMIN);
define("LOCAL_PATH_CONFIG", LOCAL_PATH_ROOT . RELATIVE_PATH_CONFIG);
define("LOCAL_PATH_MODULES", LOCAL_PATH_ROOT . RELATIVE_PATH_MODULES);
define("LOCAL_PATH_ASSET", LOCAL_PATH_ROOT . RELATIVE_PATH_ASSET);
define("LOCAL_PATH_ASSET_IMG", LOCAL_PATH_ROOT . RELATIVE_PATH_ASSET_IMG);
define("LOCAL_PATH_ASSET_CSS", LOCAL_PATH_ROOT . RELATIVE_PATH_ASSET_CSS);
define("LOCAL_PATH_ASSET_JS", LOCAL_PATH_ROOT . RELATIVE_PATH_ASSET_JS);

// -----------------------------------------------------------------------
// DEFINE URL PATHS
// -----------------------------------------------------------------------

define("HTTP_PATH_APP", HTTP_PATH_ROOT . RELATIVE_PATH_APP);
define("HTTP_PATH_LIBRARY", false);
define("HTTP_PATH_ADMIN", false);
define("HTTP_PATH_CONFIG", false);
define("HTTP_PATH_MODULES", false);
define("HTTP_PATH_ASSET", HTTP_PATH_ROOT . RELATIVE_PATH_ASSET);
define("HTTP_PATH_ASSET_IMG", HTTP_PATH_ROOT . RELATIVE_PATH_ASSET_IMG);
define("HTTP_PATH_ASSET_CSS", HTTP_PATH_ROOT . RELATIVE_PATH_ASSET_CSS);
define("HTTP_PATH_ASSET_JS", HTTP_PATH_ROOT . RELATIVE_PATH_ASSET_JS);

现在,您的应用程序中最重要路径的本地和 HTTP 变体都有一个常量。

请参阅 the PHP PowerTools Boilerplate 以获取有关此引导技术的演示。

【讨论】:

    【解决方案2】:

    您可以使用absolute path(可能是/Myproject/Config/config.php)或通过导航到上层文件夹然后转到您的需求文件../../Config/config.php来重置您的目录

    所以你可以设法包含

    include('../../Config/config.php');
    

    如includedocumentation中所述

    如果定义了路径——无论是绝对路径(在 Windows 上以驱动器号或 \ 开头, 或 / 在 Unix/Linux 系统上)或相对于当前目录(以 . 或 .. 开头) — include_path 将被完全忽略。例如,如果文件名以 ../,解析器将在父目录中查找请求的文件。

    编辑

    让我们分析一下包含路径。我们实际上在Modules/Home/ 文件夹中。达到根级别并可以进入Config 文件夹,我们需要上两层,我们可以通过为每个级别执行../ 来做到这一点,所以在我们的例子中是../../。现在我们在root 目录中,我们可以浏览Config/ 并获得我们想要的文件config.php。现在将所有混合在一起将有../../Config/config.php。

    【讨论】:

    • 当我使用 include('../../Config/config.php');我收到以下错误警告:include(../../Confg/config.php) [function.include]: failed to open stream: No such file or directory in E:\wamp\www\myproject\Modules\ Home\index.php 在第 2 行
    • 如果我重置目录,它会变得复杂,因为我需要为每个模块提供配置:(
    • @Tomphp 包括我在这里展示的方式不会重置您的目录,您将与以前在同一目录中,您将只包含文件
    • 你能用我的目录结构编辑你的答案,并告诉我如何使用目录重置来包含配置文件..这让我感到困惑..对不起。
    • 我确实包含了 ("../../Config/config.php");但仍然是同样的错误是我需要在我的 wamp 中进行的一些配置吗?
    【解决方案3】:

    我认为这会起作用:

    include '../../Config/config.php';
    

    【讨论】:

    • 无错误:警告:include(../../Config/config.php) [function.include]:无法打开流:E:\wamp\www 中没有这样的文件或目录\myproject\Modules\Home\index.php 上线
    猜你喜欢
    • 2018-04-12
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    • 2011-07-09
    • 2012-11-10
    • 1970-01-01
    相关资源
    最近更新 更多