在 httpd.conf 中用 setenv 指令全局或虚拟主机内设置环境变量,如 setenv app_env production,不加引号,全大写下划线命名,重启 apache 生效;php 中可通过 $_server 或 getenv() 读取,需确保 php.ini 的 variables_order 包含 e 才支持 $_env。

在 httpd.conf 中添加环境变量,核心是用 Apache 的 SetEnv 指令,把它写在服务器全局上下文(ServerConfig)或虚拟主机(VirtualHost)内,而不是 .htaccess 或 PHP 代码里。
直接在 httpd.conf 中设置环境变量
打开 httpd.conf(通常位于 Apache 安装目录的 conf/ 文件夹下),在合适位置添加:
SetEnv APP_ENV production SetEnv DB_HOST localhost SetEnv DB_PORT 3306
这些行可以放在:
- 全局配置段(即
<virtualhost></virtualhost>外、<ifmodule></ifmodule>外的顶层区域),影响所有虚拟主机; - 或者更推荐放在某个
<virtualhost></virtualhost>块内部,实现按站点隔离;
⚠️ 注意:
- 不要加引号(如
SetEnv APP_ENV "production"在部分 Apache 版本中会解析失败); - 变量名建议全大写、用下划线分隔,避免空格和特殊字符;
- 修改后必须重启 Apache(
httpd -k restart或服务管理器)才生效。
确保 PHP 能读到这些变量
Apache 注入的变量默认出现在 $_SERVER 数组中,例如:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
echo $_SERVER['APP_ENV']; // 输出:production
如果想用 getenv('APP_ENV'),它也能直接读取,更可靠;
若坚持用 $_ENV['APP_ENV'],需检查 php.ini 中的 variables_order 是否包含 E(如 variables_order = "EGPCS"),否则 $_ENV 不会自动填充。
推荐做法:集中管理,避免硬编码
可以把所有环境变量单独提出来,新建一个 conf/env.conf 文件,内容如下:
# conf/env.conf SetEnv APP_ENV staging SetEnv CACHE_DRIVER redis SetEnv LOG_LEVEL debug
然后在 httpd.conf 末尾加入:
Include conf/env.conf
这样便于维护,也方便不同环境(开发/测试/生产)切换配置文件。
不复杂但容易忽略。










