You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 5.8 php-fpm无法读取系统级APP_TIMEZONE环境变量问题求助

问题核心原因

php-fpm 默认启用安全隔离机制,不会继承系统级环境变量,只有 PHP CLI 模式(Tinker、命令行脚本均属于该模式)会默认读取系统环境变量,这是你 Tinker 正常但 Web 访问(走FPM进程)无法读取APP_TIMEZONE的根本原因。

修复方案

你可以任选以下一种方案实现需求:

  • 方案1:修改php-fpm pool配置(推荐,安全度最高)
    1. 找到php-fpm的pool配置文件,默认路径为/etc/php/[你的PHP版本号]/fpm/pool.d/www.conf
    2. 在配置文件末尾添加一行规则,显式允许传递APP_TIMEZONE环境变量:
    env[APP_TIMEZONE] = $APP_TIMEZONE
    
    1. 重启php-fpm服务生效:systemctl restart php[你的PHP版本号]-fpm,例如PHP8.2版本对应命令为systemctl restart php8.2-fpm
  • 方案2:在Web服务配置中传递参数
    如果使用Nginx作为Web服务,可直接在站点的server配置块的fastcgi参数段添加如下规则:
    fastcgi_param APP_TIMEZONE "Asia/Shanghai";
    
    保存后重启Nginx生效:systemctl restart nginx
  • 方案3:关闭php-fpm环境清理(不推荐,安全度低)
    若需要批量传递多个系统环境变量,可修改上述www.conf文件中的clear_env参数,将默认值On改为Off,重启php-fpm后即可让FPM继承所有系统环境变量。
验证&收尾操作

修改完成后执行Laravel配置清理命令php artisan config:clear,生产环境可执行php artisan config:cache重新生成配置缓存。你可以临时添加如下测试路由验证配置是否生效:

Route::get('/test-timezone', function () {
    return [
        '系统读取的APP_TIMEZONE' => env('APP_TIMEZONE'),
        'Laravel配置时区' => config('app.timezone'),
        '当前时间' => now()
    ];
});

测试完成后及时删除该测试路由,避免泄露服务器配置信息。

内容的提问来源于stack exchange,提问作者adaba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 06:54:03