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
相关产品推荐
相关产品推荐

