【问题标题】:How to restore local system time with PHP4如何使用 PHP4 恢复本地系统时间
【发布时间】:2013-05-11 02:29:56
【问题描述】:

我有一些 PHP4 代码,我需要在执行一些代码后恢复系统时间。我正在寻找一个简单的语句,我可以用它来存储当前日期/时间,然后恢复它:

$oTime = function1();
...
do something else
...
function2($oTime);

在 PHP5 中,您可以非常简单地使用 date_timestamp_get()date_timestamp_set(),但是如果您必须使用 PHP4,如何实现这一点最简单?

附:毫无疑问我为什么使用 PHP4。我也不喜欢……

【问题讨论】:

  • 为什么需要更改系统时间?回答这个问题可能更容易(也更安全)? (毕竟,如果一个请求将系统时间缩短了一个小时,然后另一个请求又进来了一个小时,然后第一个请求完成并恢复了时间,第二个请求将没有预期的时间,并且将恢复到第一个的工作时间)
  • 这是对时间设置功能的测试。我将时间更改为一个常数值,对其进行验证,然后将时间设置回去(略带细微之处,将时间留给测试本身)。
  • 您是否安装了 NTP(网络时间协议)。您可以使用它来将服务器时间同步回正确的时间en.wikipedia.org/wiki/Network_Time_Protocol(通常在启动时完成,但您可以自己操作 - 同步、更改时间、运行脚本、同步) - linux 命令行将是 nptdate xxntppoolxxdate xxx
  • 如果你能说服我在PHP4中没有这样的功能,而且NTP解决方案比直接编码更简单,我会试一试。但实际上我不能使用 NTP。当我想正确地做到这一点时,我需要一个 php4 函数,并且只有 php4(没有任何其他包、服务、工具、代码......)

标签: php php4


【解决方案1】:

假设使用的是Linux系统,可以直接使用date函数设置日期。然后有一个

$aDate = getdate();
...
do something else
...
exec("/bin/date ".sprintf("%02d",$aDate["mon"]).sprintf("%02d",$aDate["mday"]).
        sprintf("%02d",$aDate["hours"]).sprintf("%02d",$aDate["minutes"]).sprintf("%04d",$aDate["year"]).
        ".".sprintf("%02d",$aDate["seconds"]));

如果在中间更改日期,这无关紧要,因为它将被设置回中间步骤之前的时间。

备注:

  • inter-between 处理不应花费太多时间,因为之后的时间会出错。如果处理时间少于一秒,这应该没问题
  • 虽然使用 exec 会带来安全风险,但仅当变量 $aDate 之间没有被篡改时,上述用法才是安全的。

【讨论】:

    猜你喜欢
    • 2013-09-13
    • 2021-04-24
    • 2011-01-20
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    • 2012-06-18
    相关资源
    最近更新 更多