PHP 未设置 date.timezone 会导致时间函数警告,需通过 php --ini 定位 php.ini 并在 [Date] 段下配置 date.timezone = Asia/Shanghai,修改后重启 Web 服务,或用 date_default_timezone_set() 等临时方案。
PHP 下载安装后,date.timezone 未设置会导致 strtotime()、date() 等函数抛出警告(如 Warning: date(): It is not safe to rely on the system's timezone settings),必须显式配置时区,不能依赖系统默认。
先验证 PHP 是否可用,并定位配置文件位置:
php -v 确认安装成功php --ini 查看加载的 php.ini 路径(注意输出中 Loaded Configuration File 行)none,说明用的是默认内置配置,需手动创建或复制模板;常见路径包括:/etc/php/8.1/apache2/php.ini(Debian/Ubuntu)、/usr/local/etc/php/8.2/php.ini(macOS Homebrew)、C:\php\php.ini(Windows)php.ini-development 和 php.ini-production,需重命名为 php.ini 并选择其一使用编辑找到的 php.ini 文件,在 [Date] 段落下添加或修改这一行(不要加引号,大小写敏感):
date.timezone = Asia/Shanghai
常见合法值示例:
Asia/Shanghai(中国大陆标准时间,推荐)Asia/Chongqing(等效于 Shanghai,但已不推荐)Europe/Berlin、America/New_York、UTC
GMT+8、CST、PST —— 这些不是 IANA 时区标识符,PHP 会静默忽略或报错sudo systemctl restart apache2 或 sudo brew services restart php),CLI 模式下无需重启,但需确保下次运行用的是新配置某些共享主机或容器环境不允许改全局配置,可考虑以下方法,但注意优先级和适用范围:
date_default_timezone_set('Asia/Shanghai') —— 仅对当前请求有效,且必须在任何 date() / strtotime() 前执行.htaccess 中加:php_value date.timezone "Asia/Shanghai"(需 AllowOverride All 且 PHP 为模块模式)php_admin_value[date.timezone] = Asia/Shanghai(更安全,管理员级覆盖)export TZ=Asia/Shanghai 对 CLI 有效,但对 Web SAPI 无效,且不被 date() 函数识别真正生效的判断依据只有一个:运行 php -r "echo date_default_timezone_get();" 输出你设的值。别信“改了就完事”,很多问题出在改了错误的 php.ini 文件,或者没重启服务,或者用了 CLI 和 Web 两套不同配置。