PHP time() returns 比实际时间晚 59 秒的时间戳

PHP time() returns a timestamp that is 59 seconds behind real time

我有一个开发环境和一个生产环境。 time() 函数 returns 在我的开发环境中是正确的时间戳,但在我的生产环境中 time() 正好落后 59 秒! PHP 的版本在两个环境中都是 7.0.3。 这不可能是时区问题,因为差异只有一分钟,并且 PHP 默认时区在两个环境中是相同的(America/Los 安吉利斯)。 现在是 10:48:29 am,这是在两种环境中同时调用此函数的输出(或者至少与我在控制台上按 enter 的速度一样快)。

开发环境(正确)

php > echo date('h:i:s A');
10:48:29 AM

生产环境(落后一分钟)

echo date('h:i:s A');
10:47:31 AM

time() 函数也是如此

开发环境(正确)

php > echo time();
1568742851

生产环境(落后一分钟)

echo time();
1568742792

并且 1568742851 - 1568742792 = 59 秒

我知道我可以将 59 秒添加到时间戳 time() returns 但这看起来像是一个 hack,并没有解决问题。我想就如何修复我的生产环境获得建议。

确认您允许 NTP 流量进入您的生产 OS 环境。您可以通过 运行 以下命令确认您的服务器是否与 NTP 正确通信 ntpq -c peers 如果您收到 Connection refused 提示,则表示连接不正确。您将需要配置允许端口 123 上的 UDP 流量的入站防火墙规则。完成后,重新启动 NTP 服务 service ntpd restart 并重新运行 ntpq -c peers 命令

我相信你的生产和开发机器上的系统时钟是不同步的,不管 PHP 或操作系统的版本如何,就像评论中提到的@g_bor。

不要被时区弄糊涂了,只要运行系统shell上的命令date +%s就可以在两台机器上打印时间戳,如果你没有权限(可以' t 使用 ssh 登录),您可以准备包含 system('date +%s'); 的 PHP 文件,然后,上传到您的 Web 服务器并打开浏览器以检查两台机器上的时间戳。