是否可以通过某种方式“欺骗”单个PHP脚本,使它认为系统时钟/日期不是实际的值?

问题描述

我需要调试各种与时间有关的问题。每六个月只有一个小时发生一次错误。等待半年等待一个小时的时间来修复此错误是很乏味的。由于这个原因以及类似的测试情况,我想为单个PHP脚本“伪造系统时钟/日期”。

它一定不能更改实际的系统时钟/日期!实际上更改此设置对于我保存的所有日志来说都是灾难性的,无论多么短暂。

我希望能够做类似的事情:

Microsoft Graph

这可能吗?如果是这样,怎么办?请告诉我这是...

解决方法

不可能是PHP实现时间功能的方式。

PHP从托管服务器读取时间(在您的情况下,可以是您的PC),因此您不能像这样更改时间。

但是,有一种聪明的方法可以满足您的需求。由于时间只是其核心的时间戳,所以它是一个数字,因此请找出当前时间与您要在函数中设置的时间之间的时间戳差异(正或负)。您会得到补偿。

然后执行您想随时间进行的所有计算,并向其添加偏移量。这样,您将获得时间的所有功能,而无需再次实现整个时间功能。


function mytime() {
    return time()+set_mytime();
}

function set_mytime($new_time=null) {
    static $offset;
    if(!$new_time) {return $offset;}
    //$new_time should be a unix timestamp as generated by time(),mktime() or strtotime(),etc
    $real_time=time();
    $offset=$real_time-$new_time;
}

此外,如果您对更改时间非常感兴趣,则可以使用exec函数并调用系统命令来执行此操作。但是请注意,随机更改整个系统的时间会产生意想不到的结果。