Laravel 正确读取 .env 需确保:修改后运行 config:clear,避免缓存干扰;APP_ENV 必须为 Laravel 认可值(如 local);config:cache 会固化 env() 值并禁用该函数;敏感变量应通过部署工具或服务器环境提前注入,而非依赖 .env 文件。
如何让 Laravel 正确读取 .env 文件
Laravel 默认只在启动时加载一次
,且仅在
为
、
或
时才启用 dotenv 加载。如果你改了
但
已存在,Laravel 根本不会重新读取它——缓存配置会直接跳过
解析。
实操建议:
修改
后,必须运行
(清除配置缓存),否则新变量不生效
开发中尽量避免长期保留
;上线前再生成,且确保部署脚本包含
顺序
值必须是 Laravel 认可的环境名(如
),否则
不加载,
返回
不要在
中直接写
并期望它“动态更新”——它只在配置加载时求值一次
为什么 config:cache 后 env() 不再起作用
执行
会把所有
中的
调用**立即求值并固化为字符串**,写入
。此后
函数本身被禁用,任何后续对它的调用都返回
(Laravel 9+ 默认行为)。
常见错误现象:
本地改了
,
里
返回
部署后数据库连不上,但
明明写了
—— 实际是缓存里还存着旧值或空字符串
CI/CD 流程中先
再注入 secret,结果 secret 完全没进配置
解决办法:确保
环境变量
注入发生在
之前;或改用
/
手动读取(但需自行处理类型转换和默认值)。
多环境部署时怎么安全传入敏感变量
不能把
提交到 Git,也不能靠人工上传——得靠部署工具或服务器环境直接注入。关键是让变量在 PHP 进程启动时就可用,早于 Laravel 配置加载。
Laravel 13.2.0
PHP中文网提供Laravel 13.2.0版本下载,Laravel框架 是基于 PHP 8.3+ 的高性能框架,官方推荐通过 Composer 安装。它内置 AI SDK、JSON:API Resources 及原生向量搜索,支持属性驱动开发与队列路由,大幅提升开发效率。相比旧版,13.2.0 优化了缓存 TTL 管理与实时通信,无需 Redis 即可横向扩展。作为现代 Web 开发首选,它兼顾安全与极速体验,助您快速构建企业级应用。
下载
使用场景与建议:
Docker:用
或
挂载,确保容器内
可直接读取
Forge / Envoyer:在「Environment Variables」面板填入,它们会写入
或 Nginx/FPM 的
Server(Nginx + PHP-FPM):在
里加
,PHP 会自动注册到
云平台(如 Laravel Vapor、Heroku):通过控制台设置,它们会透传为系统级环境变量
注意:
在 runtime 设置的变量,对
无效——它只影响当前请求生命周期。
APP_ENV 和 APP_DEBUG 切换不生效?检查这三点
这两个变量控制框架行为(如错误页、日志级别、配置加载逻辑),但极易因底层机制被绕过。
容易踩的坑:
但未在
的
数组里声明
→ Laravel 当作
处理
FPM 或 CLI 进程复用旧环境:改完
后没重启 PHP-FPM,
必须做
Web 服务器(如 Apache)用
覆盖了
,优先级高于
,导致你改了文件也无效
验证方式:在路由里加
,别信
返回值。
.envAPP_ENVlocalstagingproduction.envconfig:cache.env.envphp artisan config:clearconfig:cacheconfig:clear && config:cacheAPP_ENVlocalDotenvenv()nullconfig/*.phpenv('DB_HOST')php artisan config:cacheconfig/*.phpenv()bootstrap/cache/config.phpenv()null.envphp artisan tinkerenv('APP_DEBUG')null.envDB_PASSWORDconfig:cacheconfig:cache$_ENVgetenv().envenvironment:--env-filegetenv('REDIS_HOST')~/.profilefastcgi_paramwww.confenv[DB_NAME] = myapp_prod$_ENVputenv()config:cacheAPP_ENV=stagingconfig/app.php'environments'stagingproduction.envphp-fpm -t && systemctl reload php*-fpmSetEnvAPP_DEBUG.envreturn response()->json(['env' => app()->environment(), 'debug' => config('app.debug')]);env()