上线新机器后日志里每条时间都带一条时区警告,时间也比实际早八小时。日志里能对上时间点,这种反而好排。
php.ini 没有设置 date.timezone,PHP 回退到系统默认并给出警告。这一点先确认清楚,后面就不用反复试。
; php.ini
date.timezone = Asia/Shanghai
// 代码兜底
date_default_timezone_set('Asia/Shanghai');
echo date('Y-m-d H:i:s');
「PHP 时区警告」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。
改完顺手把文档补一句,省得下次自己重新推一遍。监控和日志的时间要对上,时区不一致会多绕很大一圈。
临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。
一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。
处理上按这个顺序:在 ini 中设置时区;代码入口处兜底设置;确认服务器系统时区一致。
结果对不对很好判断,警告消失,输出的时间与本地时间一致,日志时间戳正确。