2013-04-15 30 views
1

我有一个PHP脚本,目前拉的时间从服务器使用时间();替代时间()

不幸的是,服务器上的时间最近出错了,提前 更新/重置。托管的支持已经调查了这个问题,但至今 它还没有解决,它正在进行。

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

我试图看看从NIST或 获得时间的各种其他方法,有一些提到关于从标题中获取它。我很担心,虽然 放缓脚本,我不知道最好的方法是什么。

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

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

感谢您的任何帮助。

+2

'PHP 4.4' ???不再支持..更多的问题,你的时间问题 – Baba

+0

我会认真考虑改变主机。现在大多数共享服务器至少提供5.x,如果你的Linux时间也有问题......:/ – Think

+0

我知道你在说什么,但现在我不能那么做。 – onelove

回答

3

我知道你知道这个,但4.4认真??你不关心安全吗?

要回答你的问题,如果你不想依赖于服务器的时间设置如何调用某些NTP服务器来请求当前日期/时间?

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

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

还要注意的是片状时间可通过领先于其他更严重的问题引起的。

+0

感谢您的答复!是的,我关心安全性,在我自己的dedi和VPS上他们有最新版本。这是一个不受我控制的共享服务器,并且该站点已在同一台服务器上建立了超过12年。 – onelove

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")); }