我正在构建一个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;
}
?>
如何设置随后可以访问的配置文件,包括其他包含的文件?另外,是否包含一个列出其他包含良好做法的文件?
答案 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;
}
要么必须将值作为参数传递给函数,要么使用定义的常量。