本文目录导读:

- 使用
include/require(最常用) - 使用 .env 文件(环境变量方式)
- 使用 JSON 配置文件
- 使用 YAML 配置文件(需要安装 yaml 扩展或 Symfony YAML)
- 使用 XML 配置文件
- 全局配置示例(推荐结构)
- 最佳实践建议
在PHP项目中加载外部配置文件,常见的有以下几种方式,你可以根据项目需求选择:
使用 include / require(最常用)
创建配置文件 config.php:
<?php
// config.php
return [
'db_host' => 'localhost',
'db_name' => 'test',
'db_user' => 'root',
'db_pass' => 'password',
'debug' => true
];
在项目中加载:
// 使用 require(文件不存在会报错) $config = require 'config.php'; // 或使用 include(文件不存在会警告) $config = include 'config.php'; echo $config['db_host']; // localhost
建议使用 require_once 避免重复加载:
$config = require_once 'config.php';
使用 .env 文件(环境变量方式)
安装 vlucas/phpdotenv 扩展:
composer require vlucas/phpdotenv
创建 .env 文件:
DB_HOST=localhost DB_NAME=test DB_USER=root DB_PASS=password APP_DEBUG=true
在项目中加载:
require_once 'vendor/autoload.php';
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
// 使用环境变量
$host = $_ENV['DB_HOST'];
// 或
$host = getenv('DB_HOST');
使用 JSON 配置文件
创建 config.json:
{
"db": {
"host": "localhost",
"name": "test",
"user": "root",
"pass": "password"
},
"debug": true
}
加载:
$config = json_decode(file_get_contents('config.json'), true);
echo $config['db']['host']; // localhost
使用 YAML 配置文件(需要安装 yaml 扩展或 Symfony YAML)
安装 Symfony YAML 组件:
composer require symfony/yaml
创建 config.yaml:
db: host: localhost name: test user: root pass: password debug: true
加载:
use Symfony\Component\Yaml\Yaml;
$config = Yaml::parseFile('config.yaml');
echo $config['db']['host']; // localhost
使用 XML 配置文件
创建 config.xml:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<db>
<host>localhost</host>
<name>test</name>
<user>root</user>
<pass>password</pass>
</db>
<debug>true</debug>
</config>
加载:
$xml = simplexml_load_file('config.xml');
$db = (array)$xml->db;
echo $db['host']; // localhost
全局配置示例(推荐结构)
目录结构:
project/
├── config/
│ └── database.php
├── public/
│ └── index.php
└── bootstrap.php
config/database.php:
<?php
return [
'host' => getenv('DB_HOST') ?: 'localhost',
'port' => getenv('DB_PORT') ?: 3306,
'database' => getenv('DB_NAME') ?: 'test',
];
bootstrap.php:
<?php
// 加载所有配置
$config = [];
// 加载配置目录下的所有文件
$configDir = __DIR__ . '/config';
foreach (glob($configDir . '/*.php') as $file) {
$key = basename($file, '.php');
$config[$key] = require $file;
}
// 定义全局常量或保存到容器
define('CONFIG', $config);
// 或保存到全局变量
$GLOBALS['config'] = $config;
index.php:
<?php require_once 'bootstrap.php'; // 使用配置 $dbConfig = CONFIG['database']; // 或 $dbConfig = $GLOBALS['config']['database'];
最佳实践建议
- 不要将敏感信息提交到版本控制 - 使用
.env文件并添加到.gitignore - 使用绝对路径 - 用
__DIR__或dirname(__FILE__)避免路径错误 - 缓存配置文件 - 生产环境可以缓存配置减少 I/O 操作
- 使用工厂模式 - 创建配置管理器统一管理配置加载
class Config
{
private static $config = [];
public static function load($file)
{
if (!file_exists($file)) {
throw new Exception("配置文件不存在: $file");
}
self::$config = array_merge(self::$config, require $file);
}
public static function get($key, $default = null)
{
return self::$config[$key] ?? $default;
}
}
// 使用
Config::load('config/database.php');
echo Config::get('db_host');
选择哪种方式取决于你的项目规模和团队偏好,小型项目用 include 最简单,大型项目推荐使用 .env 或专门的配置管理组件。