Webman默认不支持多环境.env文件自动加载,需手动通过-e参数注入APP_ENV、拼接.env.{env}路径并提前用Dotenv加载,且敏感配置须单引号包裹、加入.gitignore。

Webman 默认不自动识别 .env.dev 或 .env.prod,也不会因 APP_ENV 变量值自动切换配置文件——你得自己拼路径、提前注入、手动加载,否则 env() 读出来的永远是 .env 里的旧值。
Webman 启动前必须用 putenv() 注入 APP_ENV
Webman 的 start.php 和 windows.php 是 CLI 入口,但默认不解析命令行参数。-e 参数(如 -e APP_ENV=prod)必须在框架加载前被捕获并写入环境变量,否则 Dotenv 实例化时 getenv('APP_ENV') 还是空的。
-
-e必须紧接等号,不能有空格:-e APP_ENV=prod✅,-e APP_ENV = prod❌ - 代码要放在
start.php最开头、require webman/bootstrap.php之前 - Windows 下同样要改
windows.php,否则双系统部署会漏掉环境变量 - 别用
$_SERVER['APP_ENV']或$_ENV['APP_ENV']判断——putenv()只影响getenv(),不自动同步到超全局数组
vlucas/phpdotenv 不会自动加载 .env.{env}
Dotenv 库本身只认固定文件名,默认就是 .env。它不看 APP_ENV 值,也不会自动去加载 .env.prod。想按环境加载,必须自己构造路径再创建实例。
- 先调
getenv('APP_ENV')拿到当前环境,再拼路径:.env.'.'.getenv('APP_ENV') - 必须在
Dotenv::createImmutable()调用前确定路径,否则重复加载会覆盖已设变量 -
load()方法不支持传多个文件,不能写$dotenv->load('.env', '.env.prod'),得显式判断后分别调用 -
.env.prod这类文件不能提交进 Git,必须加进.gitignore
config/ 子目录不会被 Webman 自动扫描
把配置放到 config/api/v1.php 或 config/extra/wechat.php,Webman 压根不读——不是报错,是完全忽略。它只加载 config/ 根目录下的 PHP 文件(如 database.php),不递归。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
立即学习“PHP免费学习笔记(深入)”;
- 必须在
config/下建一个extra.php,且它必须return []数组 - 数组键是你想用的配置名(如
wechat),值是require子目录配置后返回的数组 - 子目录路径建议用
config_path('extra')获取,避免硬编码;scandir()前加is_dir()防止警告 - 修改子目录配置后需重启服务,Webman 不热重载 config/ 下内容
配置文件里别写 if (env('APP_ENV') === 'prod')
Webman 的配置文件(如 config/database.php)是 PHP 脚本,返回数组。你在里面直接调 env() 是可以的,但有个关键前提:该函数依赖的 Dotenv 实例必须已在前面初始化完毕。
- 如果
env()调用发生在 Dotenv 加载前,返回 null 或空字符串,数据库连不上都查不出原因 - 更危险的是在配置文件里做条件判断,因为配置合并发生在启动早期,此时
APP_ENV可能还没被putenv()写入 - 推荐做法:所有环境逻辑统一收口到
config/bootstrap.php或start.php开头,算出最终值后用config('database.host', $host)显式写入 - 敏感字段如
DB_PASS在.env里必须用单引号包裹:DB_PASS='p@ss w0rd!',否则空格或$会被 shell 解析
真正容易被忽略的是顺序:环境变量注入 → Dotenv 实例化并加载对应 .env.* → 配置文件执行 → config() 覆盖。任何一步错位,env() 就失效,而错误现象往往只是“配置没生效”,看不出哪环断了。


















