本文目录导读:

在PHP项目中区分环境变量,主要有以下几种常见方式:
使用 .env 文件(推荐)
安装依赖
composer require vlucas/phpdotenv
创建环境文件
.env(生产环境)
APP_ENV=production
DB_HOST=localhost
DB_NAME=production_db
DB_USER=admin
DEBUG=false
.env.development(开发环境)
APP_ENV=development
DB_HOST=localhost
DB_NAME=dev_db
DB_USER=root
DEBUG=true
加载配置
<?php
require_once __DIR__ . '/vendor/autoload.php';
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
// 根据服务器环境加载不同文件
$env = getenv('APP_ENV') ?: 'production';
$envFile = ".env.{$env}";
if (file_exists($envFile)) {
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__, $envFile);
$dotenv->load();
} else {
$dotenv->load();
}
服务器环境变量
Apache 配置
# .htaccess 或 httpd.conf SetEnv APP_ENV production SetEnv DB_HOST localhost SetEnv DB_NAME myapp_db
Nginx 配置
fastcgi_param APP_ENV production; fastcgi_param DB_HOST localhost;
PHP 获取
$env = $_SERVER['APP_ENV'] ?? 'production'; $dbHost = $_SERVER['DB_HOST'] ?? 'localhost';
根据主机名区分
<?php
class EnvironmentDetector {
public static function detect(): string {
$host = gethostname();
$environments = [
'dev-server' => 'development',
'test-server' => 'testing',
'prod-server' => 'production',
];
return $environments[$host] ?? 'production';
}
}
// 使用
$env = EnvironmentDetector::detect();
配置文件数组方式
config/environment.php
<?php
return [
'development' => [
'debug' => true,
'db' => [
'host' => 'localhost',
'name' => 'dev_db',
],
'log_level' => 'debug',
],
'production' => [
'debug' => false,
'db' => [
'host' => 'production-db.example.com',
'name' => 'prod_db',
],
'log_level' => 'error',
],
];
加载配置
<?php
$env = getenv('APP_ENV') ?: 'production';
$configPath = __DIR__ . "/config/environment.php";
$environments = require $configPath;
$config = $environments[$env] ?? $environments['production'];
使用框架内置机制
Laravel 示例
// .env 文件
APP_ENV=local
DB_CONNECTION=mysql
// 在代码中使用
$env = app()->environment();
if (app()->environment('local')) {
// 开发环境逻辑
}
Symfony 示例
// .env 文件 APP_ENV=dev // 在代码中使用 use Symfony\Component\Dotenv\Dotenv; $dotenv = new Dotenv(); $dotenv->load(__DIR__.'/.env'); $env = $_SERVER['APP_ENV'] ?? 'prod';
环境变量示例表
| 环境 | 文件 | 典型配置 |
|---|---|---|
| 开发 | .env.development |
调试开启,错误显示,使用本地数据库 |
| 测试 | .env.testing |
开启错误显示,使用测试数据库 |
| 预发布 | .env.staging |
错误不显示,使用预发布数据库 |
| 生产 | .env.production |
调试关闭,安全模式,使用生产数据库 |
安全建议
<?php
// 环境检测函数
function getEnvironment(): string {
// 优先级:环境变量 > 配置文件 > 默认值
$env = getenv('APP_ENV');
if (!$env && file_exists('.env')) {
$env = parse_ini_file('.env')['APP_ENV'] ?? 'production';
}
return $env ?: 'production';
}
// 获取配置
function getConfig(string $key, $default = null) {
$env = getEnvironment();
$configFile = __DIR__ . "/config/{$env}.php";
if (file_exists($configFile)) {
$config = require $configFile;
return $config[$key] ?? $default;
}
return $default;
}
最佳实践
- 永远不要将
.env文件提交到 Git - 使用
.env.example作为模板 - 敏感信息(数据库密码、API密钥)使用环境变量
- 不同环境使用不同的
.env文件或环境变量 - 在部署时自动设置环境变量
- 始终提供合理的默认值
选择哪种方式取决于项目规模和团队习惯,中小型项目推荐使用 .env 文件方式,大型项目建议结合框架内置机制和服务器环境变量。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播