我有点奇怪的问题.是否可以在脚本工作的时间在PHP中设置假日期?我正在使用使用时间段的API,例如当您发送获取某些数据的请求时,您可以指定时间段(例如一个月,但这些时间段是固定的),并且它会将request_time-1month的结果返回到request_time.显然,请求数据是当前时间,因此我想模拟当前时间(例如设置日期从5月10日到4月15日).可能吗?我在PHP文档中看不到任何有用的东西,我甚至不知道它是否可行,因为我不确定这个API是否使用来自服务器的工作时间或存储上述数据的独立服务器.但也许有人有任何想法.
谢谢你提前.
Ale*_*tch 14
使用libfaketime(https://github.com/wolfcw/libfaketime).在ubuntu上 - 只需使用apt-get或aptitude安装faketime.
如果你想假装控制台应用程序的时间:
LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 FAKETIME="2008-01-01 00:00:00" php yourscript.php
Run Code Online (Sandbox Code Playgroud)如果你想伪造apache时间,你需要在预加载libfaketime的情况下启动apache.刚刚放
export FAKETIME="2008-01-01 00:00:00"
export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1
Run Code Online (Sandbox Code Playgroud)进入/ etc/apache2/envvars并重启apache.现在您的服务器响应总是如此
$ curl -D - http://localhost
HTTP/1.1 200 OK
Date: Tue, 01 Jan 2008 00:00:00 GMT
Server: Apache/2.2.22 (Ubuntu)
Last-Modified: Tue, 01 Jan 2008 00:00:00 GMT
ETag: W/"420419-b1-4429c2a6653ac"
Accept-Ranges: bytes
Content-Length: 177
Vary: Accept-Encoding
Content-Type: text/html
Run Code Online (Sandbox Code Playgroud)
如果您要连接的 API 使用“request_time - 1 个月”,那么您的脚本认为的时间并不重要,只与API 背后的脚本认为的时间相关。(打个愚蠢的比喻:如果一家商店下午 5 点关门,提早设置手表不会让你在 5:30 进入;你需要偷偷溜进去并更改墙上的时钟,这样工作人员就不会上锁向上。)
因此,除非您能找到一种方法来欺骗远程 API,使其认为您在不同时间发送了请求,否则您无能为力。
如果您控制 API,那么只需编辑 API 以获得一个覆盖“现在”定义的参数,也许只允许在特殊的调试模式下使用。