filemtime() 是获取文件最后修改时间戳最可靠方式,返回秒级 Unix 时间戳;需判断 false 值并避免用 stat() 或 getlastmod() 替代,时间比较前须统一转为时间戳,注意时区一致性与缓存问题。
用 filemtime() 获取文件最后修改时间
PHP 判断文件是否在某个时间区间内被修改,核心是先拿到准确的修改时间戳。直接调用 filemtime() 是最可靠方式,它返回的是 Unix 时间戳(秒级),不是字符串或格式化日期。
注意:该函数要求文件存在且可读,否则会触发警告并返回 false。务必加判断:
if (false === $mtime = @filemtime($filepath)) {
// 文件不存在、无权限或路径错误
}
别用 stat() 或 getlastmod() 替代——前者开销大且字段易混淆,后者只返回当前脚本的修改时间,完全不适用。
把时间区间转成时间戳再比较
PHP 不支持直接拿字符串日期(如 "2024-05-01")和 filemtime() 返回值做大小比较。必须统一转为整型时间戳。
立即学习“PHP免费学习笔记(深入)”;
常见错误写法:$mtime > '2024-05-01' —— 这是在比字符串,结果不可靠。
正确做法:
- 用
strtotime()转区间边界(支持相对时间,如"-7 days") - 用
DateTime类更严谨(尤其涉及时区或复杂格式时) - 确保所有时间戳基于同一时区,否则跨时区服务器可能出错
示例:判断文件是否在过去 24 小时内修改过