You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中touch()用time()设置过去时间是否有限制?如何设置多年前时间?

文件时间戳改到过去的限制与最优实现方案

一、改到遥远过去时,time()参数有没有限制?

先给你理清楚:往过去改时间的话,time()参数本身在PHP层面没限制,但得看你用的操作系统和文件系统支持的时间范围。

比如常见的Unix类系统,一般支持从1970年1月1日(Unix纪元)到2038年1月19日(32位时间戳的上限);64位系统的时间戳范围就大很多,能支持到更早的过去和更远的未来。

你提到的touch()函数的未来时间限制(最多100000秒),那是针对设置未来时间的限制(怕设置太遥远的未来出问题),这个限制对过去时间完全不适用。

二、直接用time()减秒数改1年/5年前,可行吗?

你写的这种写法是通用可行的,但有个小瑕疵:

$time = time() - 31536000; // 按365天算1年
$time = time() - 157680000; // 5年就是5*365天

手动算秒数没考虑闰年(闰年一年多1天,也就是86400秒),如果要精准计算的话,更推荐用PHP的DateTime类,它能自动处理闰年、不同月份天数差异这些问题,代码也更好懂:

精准实现的示例代码

// 设置为1年前的此刻
$date = new DateTime();
$date->sub(new DateInterval('P1Y'));
$time = $date->getTimestamp();

// 设置为5年前的此刻
$date = new DateTime();
$date->sub(new DateInterval('P5Y'));
$time = $date->getTimestamp();

// 执行修改操作
$file_pointer = "gfg.txt";
if (touch($file_pointer, $time)) {
    echo "$file_pointer 的修改时间已设为1年前。";
} else {
    echo "$file_pointer 修改时间失败,请检查权限。";
}

三、额外要注意的点

  • 必须保证PHP进程对目标文件有写入权限,不然touch()肯定失败。
  • 要是用的是老旧文件系统(比如FAT32),它支持的时间戳范围可能更窄,得留意文件所在的存储类型。

内容的提问来源于stack exchange,提问作者Kankan2000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 05:24:30