PHP中的Time()函数


Time() function in PHP

我只是想问一下,因为我正在编写一个脚本,并且我正在使用time()作为我正在做的事情的盐。

现在发生的事情是,我正在对从服务器1发送到服务器2的数据进行盐析。服务器2检查data = submitted_data + time()是否完全匹配。我想知道,由于我的脚本将在不同的服务器上使用,time()函数是否会返回相同的值(如果它们位于世界的不同地区?)

客户端的代码示例是:

if($return == md5("true" . time()))

还有一个代码示例,如果提交的数据正确,将返回以下信息:

echo md5('true' . time());

两者都位于世界不同地区的不同服务器上,但我想知道使用time()是否会打乱我的系统的工作方式。。?

为什么不尝试以下操作:

回波日期("Y-m-d H:i")echo strtotime(日期("Y-m-d H:i"));

strtotime的值(日期("Y-m-d H:i");在你通过下一分钟之前不会改变,或者你可以根据你的要求删除"i"。

希望能有所帮助。

这不起作用,因为time()依赖于系统的本地时钟,这在很大程度上保证了在任何两台计算机/时钟之间都不同步。其次,您无法保证操作系统何时会给给定的进程运行时间;因此,一台服务器可能会因为正在做其他密集的事情而关闭几毫秒。然后你有网络延迟等。

这是分布式系统的一个重要问题,分布式系统必须保持事物"同步",而不知道具体何时发生了哪些操作。(如果数据库分布在多个服务器上,那么数据库的更新应该在更新之前进行吗?)出于这个原因,最好不要依赖时间,而是可能依赖其他一些东西,比如修订号(然后递增)。例如:

  • 服务器发送修订id为142的数据(注意"142"在本例中是任意的)
  • 客户端进行更改,增加修订并散列
  • 客户端将带有散列修订号的数据发送到服务器
  • 服务器会增加自己的修订id并对其进行散列。现在,这应该等于客户端发送的内容
  • 如果没有,服务器将拒绝发送数据

这使您能够在不依赖不一致的外部资源的情况下模拟时间。