CentOS7+DirectAdmin环境下PHP.ini禁用夏令时及时间显示问题求助
解决PHP禁用夏令时并匹配服务器时间的方案
1. 替换PHP时区为固定偏移值
Asia/Tehran时区自带夏令时规则,即便系统层面禁用了夏令时,PHP仍会遵循时区数据库的夏令时配置计算时间。要强制禁用夏令时,需将PHP时区改为无夏令时的固定偏移时区:
- 先找到当前PHP加载的配置文件路径:
php -i | grep "Loaded Configuration File" - 编辑该文件,将
date.timezone项替换为:
注:Etc/GMT系列的偏移是反向定义的,date.timezone = Etc/GMT-3:30GMT-3:30对应UTC+3:30(德黑兰标准时间),不会触发夏令时切换。
2. 检查PHP-FPM配置(若使用)
如果站点使用PHP-FPM,需确认对应池配置未覆盖时区设置:
- 进入FPM配置目录(通常为
/usr/local/phpXX/etc/php-fpm.d/,XX为PHP版本号) - 检查各池配置文件,若存在
php_value[date.timezone]或php_admin_value[date.timezone],统一修改为Etc/GMT-3:30
3. 重启相关服务
- CLI PHP无需重启,修改配置后执行命令会自动读取新设置
- PHP-FPM需重启生效:
systemctl restart php-fpmXX.service # 将XX替换为你的PHP版本,如php-fpm74
4. 验证结果
执行命令测试时间是否匹配服务器当前时间:
php -r "echo date('H:i');"
或指定时区测试:
php -r "date_default_timezone_set('Etc/GMT-3:30'); echo date('H:i');"
此时输出应与系统时间完全一致,且不会再触发夏令时切换。
备选方案
若系统时间已固定为UTC+3:30,也可将PHP时区设为UTC,再在代码中手动叠加3.5小时,但这种方式不如直接使用固定偏移时区简洁。
内容的提问来源于stack exchange,提问作者Vahid Ghasemi
相关产品推荐
相关产品推荐

