1

我有一个 PHP 脚本,它当前使用 time() 从服务器提取时间;

不幸的是,服务器上的时间最近是错误的,并且在更新/重置之前提前。托管支持已调查此问题,但尚未解决,并且仍在进行中。

对于这个脚本,我需要时间来相对准确,所以我想我可以进行临时修复,直到上述问题得到解决。

我曾尝试查看其他各种获取时间的方法,例如从 NIST 获取时间,或者有人提到从标题中获取时间。我担心会减慢脚本速度,但不确定最好的方法是什么。

顺便说一句,PHP 版本是 4.4 - 是的,我知道它应该更改,但这不在我的控制范围内,因为它位于共享服务器上。

因此,有关如何获取当前时间的任何建议 - 而不是服务器时间并将其作为 unix 时间戳,如 time();

谢谢你的帮助。

4

2 回答 2

3

我知道你知道这一点,但是 4.4 严重吗?你根本不关心安全吗?

如果您不想依赖服务器的时间设置来回答您的问题,那么调用一些 NTP 服务器来请求当前日期/时间怎么样?

http://www.pool.ntp.org/

经过一番搜索,我发现这可能是重复的:php validation for NTP server

另请注意,不稳定的时间可能是由前面的其他更严重的问题引起的。

于 2013-04-15T18:00:15.880 回答
0

制作一个从任何服务器获取时间的脚本。就像您建议的 NIST 服务器一样。或使用 timeanddate.com。您可以使用 file_get_contents() (php4.3+) 尝试file_get_contents("http://free.timeanddate.com/clock/i3l84w5k/tt0/tw0/tm3/td2/th1/ta1/tb3")使用正则表达式来提取时间字符串。然后使用 . 将该时间字符串转换为时间戳strtotime()

让此脚本调用 time() 并将返回的时间戳从远程主机的时间(时间戳)中减去。

现在将此偏移量写入缓存、数据库或文件。

并将此脚本放入 cron 作业中。

并编写一个函数 myTime(),从缓存/数据库/文件中读取偏移量并将其添加到 time()。


编辑:我解决了一点:

使用 cronjob 定期运行此脚本:

date_default_timezone_set("UTC");
$html = file_get_contents("http://free.timeanddate.com/clock/i3l84w5k/tt0/tw0/tm3/td2/th1/ta1/tb3");
preg_match('/id=t1>(.*)</U',$html, $matches);
$timeStamp = strtotime($matches[1]);
$offset = time() - intval($timeStamp);
$fh = fopen("time_offset.txt", "w");
fwrite($fh, $offset);
fclose($fh);

使用此函数获取调整后的时间:

function myTime() { return time() - intval(file_get_contents("time_offset.txt")); }
于 2013-04-15T18:34:21.713 回答