PHP中的时间飞跃&x27;s函数时间()

PHP中的时间飞跃&x27;s函数时间(),php,time,timestamp,Php,Time,Timestamp,使用PHP的time()函数的timestamp,我用date()向用户显示当前时间 格式:H:i=>13:57 但有时似乎有时间上的飞跃。当我浏览网页时,我的windows时钟显示13:40。但是我的网站说14:XX。我不知道确切的时间了 另一个例子:一个用户在00:16访问了“谁在线?”页面。列出了一个用户,其最后一次操作的时间为00:39。每次页面加载时,最后一次操作时间都会写入数据库。因此,time()函数必须在00:16返回00:39,并且必须将错误的值写入数据库 这怎么会发生 非常感

使用PHP的time()函数的timestamp,我用date()向用户显示当前时间

格式:H:i=>13:57

但有时似乎有时间上的飞跃。当我浏览网页时,我的windows时钟显示13:40。但是我的网站说14:XX。我不知道确切的时间了

另一个例子:一个用户在00:16访问了“谁在线?”页面。列出了一个用户,其最后一次操作的时间为00:39。每次页面加载时,最后一次操作时间都会写入数据库。因此,time()函数必须在00:16返回00:39,并且必须将错误的值写入数据库

这怎么会发生

非常感谢您的帮助:)

编辑#1我已将代码缩减为对该问题非常重要的部分:

我将时间戳保存到serverData.php中的一个新变量$tStamp=time(),该文件包含在index.php中,其中我用日期('d.m.Y,H:I',$tStamp)向用户显示时间。变量$tStamp在任何其他行中都没有更改

编辑#2我网站上的用户在2010-01-21 00:16注意到一个错误的时间,页面在很短的时间内显示了00:39。我已经查看了日志文件,大约在这个时候,日志文件中少了一个完整的小时:

127.0.0.1---[20/Jan/2010:23:34:53+0100]

127.0.0.1---[20/Jan/2010:23:34:55+0100]

127.0.0.1---[21/Jan/2010:00:38:41+0100]

127.0.0.1---[21/Jan/2010:00:38:41+0100]

我的主人宣布了2010-01-20 00:00-06:00的维护工作。你认为维修工作延期了吗?在这段时间内,是否会在第二天完成维护工作?这样的工作会使时间错吗

编辑#3最后,我的主人给了我一个答案:)在给定的时间段内,服务器崩溃了。正因为如此,表/钟停止了。就这么简单,但我没有想到服务器会崩溃。非常感谢大家


请记住,time()返回的是服务器的时间,而不是您的时间。如果返回不同的值,则表示服务器时间与pc时间不同。

您可以在php.ini中或在运行时使用date\u default\u timezone\u set()函数配置服务器的时区。

代码中可能有错误。如果可以,请粘贴一些代码


否则,创建一些测试页面,将问题简化为更简单的代码库,并只测试时间函数。这将有助于澄清和隔离任何潜在问题。你明白我的意思吗?

作为一个非常遥远的选项,可能有一个错误的ntp位置,当它被检查时,它会暂时改变系统时间。在下一次更新到正确的服务器时,它将被设置回正确的时间。我不认为系统时间会漂移太多。

这可能是一个缓存问题,服务器设置为提前一小时到达另一个时区,这在示例中似乎是最有可能的

,如果服务器有缓存(,等等),则也将其关闭,然后重试该实验


或者服务器场有一个或两个节点的时间设置不正确。

我建议将脚本输出与apache日志进行比较,或者更好——还可以创建一个日志,在请求时记录时间值。这是为了排除以下可能性:

有些提供商的缓存网络不直接将内容从您发送到站点,而是缓存内容,希望其他人也会要求相同的页面,然后他们可以节省外部带宽。因此,如果网络出现故障,您可能会得到错误的页面版本


与ApacheLog或syslog进行比较将有助于您了解其他代码是否与您的代码具有相同的时间概念-这消除了代码问题的可能性,并可能将其从php领域带入服务器领域。如果是这样的话,我会仔细研究ntp——它是我所知道的唯一一个会扰乱时间的守护进程

方法是通过PHP获取服务器的时间并注入客户端javascript,将其转换为GMT时间并添加偏移量,从而将时间转换为时区的时间

阅读了所有这些问题和您在评论中的回答后,我可以说这是PHP中的一个bug的可能性非常小。PHP的
time()。因为您使用的是共享主机,所以如果这种情况经常发生,并造成问题,您必须要求您的主机进行调查。它可能是一个恶意NTP服务器或进程,也可能是硬件时钟的某种短路——如果不访问服务器日志或物理访问计算机,我所知道的你个人可以做的事情就不多了。

服务器场上设置时间不正确的恶意节点肯定可以做到这一点(正如@wallyk所建议的那样)-这比NTP问题更合理

查看是否有任何方法可以识别您的请求由哪个节点提供服务

尝试将php_uname()或包含在HTML注释中,并检查时间不正确的页面源。这些信息可能足以确定问题是否与特定节点相关


或者创建一个页面,将函数调用的结果与当前时间()一起打印,并编写一个脚本,多次获取该页面,直到发现异常为止。(显然,您应该小心避免缓存该页面,并首先确保php_uname()或gethostname()提供了足够的信息以确定不同的节点是否正在处理不同的请求)

否!您误解了某些内容