【问题标题】:An Alternative To Time()Time() 的替代方案
【发布时间】:2013-04-15 17:50:11
【问题描述】:

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

很遗憾,服务器上的时间最近有误,而且提前了 在它更新/重置之前。托管支持已经调查了这个问题,但到目前为止 尚未解决,仍在进行中。

对于这个脚本,我需要时间来比较准确,所以我想我可能是 能够在上述问题解决之前进行临时修复。

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

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

所以关于如何获取当前时间的任何建议 - 而不是服务器时间和 将其作为 unix 时间戳,例如 time();

感谢您的帮助。

【问题讨论】:

  • PHP 4.4 ???不再支持..您的时间问题更多的问题
  • 我会认真考虑更换主机。现在大多数共享服务器至少提供 5.x,如果您的服务器也有 linux 时间问题...:/
  • 我知道你们在说什么,但不幸的是目前我做不到。
  • 你好,所以只调整timezone设置不能帮助纠正那个时间戳?
  • 没有服务器时间获得时间 - 昨天提前 30 分钟以上 - 今天提前 40 分钟以上

标签: php time


【解决方案1】:

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

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

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

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

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

【讨论】:

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

制作一个从任何服务器获取时间的脚本。就像您建议的 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")); }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-13
    • 2015-03-03
    • 2015-09-25
    • 2019-12-16
    • 2011-06-20
    • 2015-11-03
    • 2014-04-03
    • 2011-12-13
    相关资源
    最近更新 更多