0

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

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

索引.php

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

函数/加载.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;
}
?>

如何设置一个可以在任何地方访问的配置文件,包括在其他包含的文件中?此外,是否包含列出其他文件的文件是否包含良好做法?

4

3 回答 3

1

最好包含一个bootstrap.php文件,该文件将包含所有必要的要求。引导程序还应该定义一个自动加载器,它能够自动加载类而无需明确要求。

但是无法自动加载函数,因此在bootstrap.php使用require_once(). 有关其他选择,请参阅此问题

理想情况下,您的应用程序只有一个“入口点”,称为“前端控制器”。如果是这样,那么您只需要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'];
于 2012-10-25T10:28:56.127 回答
0

您只需包含一次您的“config.php”。最好的方法是将“require_once”放入脚本中,例如“index.php”。看看 MVC 模式。

于 2012-10-25T10:25:46.570 回答
0

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

试试这样:

在 config.php 中

define("SITEURL","http://127.0.0.1");

在 header.php 中

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

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

于 2012-10-25T10:34:00.517 回答