0

我有一个开发环境和一个生产环境。time() 函数在我的开发环境中返回正确的时间戳,但在我的生产环境中 time() 正好落后 59 秒!两种环境中的 PHP 版本均为 7.0.3。这不可能是时区问题,因为差异只有一分钟,而且 PHP 默认时区在两种环境(美国/洛杉矶)中都是相同的。现在是上午 10:48:29,这是在两种环境中同时调用此函数的输出(或者至少与我在控制台上按 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() 返回,但这似乎是一个 hack,并不能解决问题。我想请教一下如何修复我的生产环境。

4

2 回答 2

2

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

于 2019-10-11T18:32:26.893 回答
0

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

不要对时区感到困惑,只需date +%s在系统shell上运行命令打印两台机器上的时间戳,如果您没有权限(无法使用ssh登录),您可以准备包含的PHP文件system('date +%s');,然后,上传到您的网络服务器并打开浏览器以检查两台机器上的时间戳。

于 2019-10-16T08:11:11.330 回答