我应该如何在PHP中设置可以在包含中访问的配置?

时间:2012-10-25 10:19:07

标签: php

我正在构建一个PHP应用程序,我不太确定如何存储可以在任何地方真正访问的全局配置设置 - 似乎包含 的内容无法访问其他内容主要的起始页面。例如,如果index.php包含foo.php和bar.php,bar.php没有foo.php,但index.php有两个 - 包含的文件不能引用其他文件。它是否正确?

如果是的话,我该如何设置这样的东西?

的index.php

<?php
include 'functions/load.php'
echo getHeader();
?>

功能/ load.php:

<?php
include_once 'config.php'
include_once 'header.php'
//loads the includes
?>

功能/ config.php中:

<?php
//I want to store the site URL here.
$siteURL = "http://127.0.0.1";
?>

功能/ header.php文件:

<?php
function getHeader(){
    return "Header for " . $siteURL;
}
?>

如何设置随后可以访问的配置文件,包括其他包含的文件?另外,是否包含一个列出其他包含良好做法的文件?

3 个答案:

答案 0 :(得分:1)

最好包含一个bootstrap.php文件,其中包含所有必要的要求。引导程序还应该定义一个自动加载器,它可以自动加载类,而不必明确要求。

虽然无法自动加载功能,因此bootstrap.php使用require_once()需要包含功能的文件。有关其他替代方案,请参阅this question

理想情况下,您的应用程序只有一个“入口点”,称为“前端控制器”。如果是这样,那么您只需要在此文件的顶部需要bootstrap.php一次。

编辑:关于配置的注意事项

您也可以在引导程序中加载配置。如何执行此操作取决于您...您可以将所有变量直接放在bootstrap.php中,否则您可能需要在配置中进行操作。最佳做法是将配置存储在单独的文件中。

通过PHP数组配置:

# in /path/to/config.php (not in a publically accessible directory!)
return array(
    'site_url' => '127.0.0.1', 
    'example' => array(
        'animal' => 'cat', 
        'vehicle' => 'car'
    )
)


# in bootstrap.php
$config = require_once('/path/to/config.php');

# anywhere else
$siteUrl = $config['site_url'];
$animal = $config['example']['animal'];

或者您可以使用INI文件:

# in /path/to/config.ini (not in a publically accessible directory!)
[site]
url = 127.0.0.1

[example]
animal = cat
vehicle = car


# in bootstrap.php
$config = parse_ini_file('/path/to/config.ini', true); 


# anywhere else
$siteUrl = $config['site']['url'];
$animal = $config['example']['animal'];

答案 1 :(得分:0)

你必须只包括你的'config.php'一次。最好的方法是将“require_once”放到脚本中,例如,可以保证包括“index.php”。看看MVC模式。

答案 2 :(得分:0)

实际上问题不在于包含文件。你已经编写了函数getHeader()并从外部访问变量的值。你无法从函数外部获得$ siteURL的值。为此你应该使用常量:

试试这样:

在config.php中

define("SITEURL","http://127.0.0.1");
在header.php中

function getHeader(){
    return "Header for " . SITEURL;
}

要么必须将值作为参数传递给函数,要么使用定义的常量。