应修改 php.ini 中 date.timezone = "Asia/Shanghai" 并重启 Web 服务,因 PHP 需明确时区标识且仅认 Asia/Shanghai;Docker 环境需确认容器内实际加载的 php.ini 路径并挂载生效。
PHP 报错 It is not safe to rely on the system's timezone settings 怎么修
这是 php 在找不到默认时区配置时抛出的警告,phpmyadmin 启动或执行 sql 时常见。本质不是 phpmyadmin 的问题,而是 php 自身的 date.timezone 没设或设错了。
直接改 php.ini 最稳妥,别指望靠 date_default_timezone_set() 在 phpMyAdmin 里临时补 —— 它可能在加载早期就被调用,补不进去。
- 先确认你改的是正在运行的 PHP 配置文件:执行
php --ini或在 phpMyAdmin 首页点「PHP 信息」看Loaded Configuration File - 编辑该
php.ini,找到;date.timezone =这行,去掉分号,填上合法时区标识符,比如:date.timezone = "Asia/Shanghai" - 别写
PRC、GMT+8或空字符串 —— 这些 PHP 不认,会静默失败 - 改完必须重启 Web 服务(
sudo systemctl restart apache2或sudo systemctl restart php-fpm nginx),光 reload 不够
为什么 Asia/Shanghai 而不是 Asia/Chongqing 或 Asia/Hong_Kong
中国大陆全境统一使用东八区时间,但 IANA 时区数据库里只有 Asia/Shanghai 是官方推荐标识。虽然 Asia/Chongqing 和 Asia/Hong_Kong 当前偏移相同,但语义不同:
-
Asia/Shanghai明确代表中国标准时间(CST),含历史夏令时修正记录(尽管中国已多年未实行) -
Asia/Hong_Kong属于香港时区,法律和历法调整路径独立,未来若有变更会分叉 -
Asia/Chongqing是软链接到Asia/Shanghai,但部分旧版 PHP 解析器可能忽略软链,直接报错
所以只认 Asia/Shanghai,别图省事抄别的。
docker 环境下 phpMyAdmin 时区还是不对?检查三处
Docker 容器里容易漏掉层级:宿主机、PHP 容器、phpMyAdmin 镜像构建逻辑都可能覆盖时区设置。
立即学习“PHP免费学习笔记(深入)”;
- PHP 容器启动时没挂载自定义
php.ini?优先用-v /path/to/php.ini:/usr/local/etc/php/php.ini:ro强制指定 - 镜像用了
phpmyadmin/phpmyadmin官方镜像?它默认不带date.timezone,必须通过环境变量或覆盖配置补上 - 容器内执行
php -r "echo date_default_timezone_get();",输出如果不是Asia/Shanghai,说明配置根本没生效 —— 别信 phpMyAdmin 页面显示的「服务器时区」,那可能是 MySQL 的,不是 PHP 的
改完仍报错?重点查 phpinfo() 里的 Configuration File (php.ini) Path 和 Loaded Configuration File
很多人改了错的 php.ini —— 比如系统有多个 PHP 版本,CLI 用一个,Apache 用另一个;或者用了 PHP-FPM,主配置和 pool 配置分离。
- 在 phpMyAdmin 根目录放个
info.php,内容为<?php phpinfo(); ?>,用浏览器打开,精准定位「哪个文件被加载」 - 注意看
date.timezone行右侧的值是不是你填的,且状态是Local Value和Master Value一致 - 如果
Master Value是no value,说明配置根本没读到;如果是其他值,说明被别的 ini 文件(比如zzz-custom.ini)覆盖了
时区问题看着小,但跨环境、跨版本、跨容器时,配置加载路径的细微差异就是最常卡住人的地方。



















