我有一个PHP脚本,目前使用time()从服务器中抽出时间;
不幸的是,服务器上的时间最近出错了 在更新/重置之前。托管支持已经调查了这个问题,但是到目前为止 它还没有得到解决,而且还在继续。
对于这个脚本,我需要时间相对准确,以为我可能会这样 能够进行临时修复,直到上述问题得到解决。
我试图看看从NIST或者NST获得时间的各种其他方法 有一些提到从头文件中获取它。我很担心 减慢脚本速度,我不确定最好的方法是什么。
BTW PHP版本是4.4 - 是的,我知道它应该被改变,但那不是 我在共享服务器上的控制权。
所以有关如何获取当前时间的任何建议 - 而不是服务器时间和 把它作为像time()的unix时间戳;
感谢您的帮助。
答案 0 :(得分:3)
我知道你知道这一点,但4.4严重吗?你根本不关心安全吗?
如果你不想依赖服务器的时间设置,那么回答你的问题如何调用某些NTP服务器来请求当前的日期/时间呢?
经过一番搜索,我发现这可能重复:php validation for NTP server
另请注意,未来可能会出现其他更严重的问题。
答案 1 :(得分: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")); }