filemtime() 返回文件最后修改时间戳,需确保路径正确且有读取权限;返回false表示失败;__file__可获取当前脚本绝对路径;时区需显式设置以避免显示偏差。

用 filemtime() 获取 PHP 文件最后修改时间
PHP 中最直接、最常用的方式就是 filemtime() 函数,它返回指定文件最后一次被写入(内容修改)的时间戳。注意:不是访问时间,也不是创建时间,是「最后修改内容」的时间。
常见错误是传入相对路径但当前工作目录不一致,导致 Warning: filemtime(): stat failed。务必确保路径可访问且有读取权限。
-
filemtime()只接受本地文件路径,不支持 HTTP URL - 如果文件不存在或无权限,函数返回
false,需提前判断 - 返回值是 Unix 时间戳(秒级),如需可读格式,用
date('Y-m-d H:i:s', $timestamp) - 对符号链接,默认解析目标文件的修改时间(非链接本身)
stat() 和 filemtime() 有什么区别?
stat() 返回包含多个时间字段的数组,其中 mtime 与 filemtime() 结果一致;而 ctime 是 inode 修改时间(如权限变更、重命名),atime 是最后访问时间(可能因系统挂载选项被禁用)。
如果你只需要修改时间,filemtime() 更轻量、语义更清晰;如果同时要查大小、权限、其他时间点,用 stat() 避免多次系统调用。
-
filemtime($path)≡stat($path)['mtime'] -
filectime($path)对应stat($path)['ctime'],不是创建时间(Windows 下行为特殊,慎用) -
fileatime($path)可能因noatime挂载选项始终不更新
获取当前 PHP 脚本自身的修改时间
常用于版本标记、缓存失效判断或调试时确认是否部署了最新代码。关键在于用 __FILE__ 获取绝对路径,避免相对路径歧义。
<?php $script_mtime = filemtime(__FILE__);
echo date('Y-m-d H:i:s', $script_mtime);
?>
注意:__FILE__ 在被 include 或 require 的文件中,返回的是该被引入文件的路径,不是主脚本路径。如果需要主脚本时间,得显式传入或用 $_SERVER['SCRIPT_FILENAME'](但后者在 CLI 环境下不可靠)。
- CLI 模式下
$_SERVER['SCRIPT_FILENAME']可能未定义,优先用__FILE__ - 若脚本被 OPcache 缓存,
filemtime()仍返回磁盘上文件的真实时间,不受缓存影响 - 不要依赖修改时间做安全校验(如“过期脚本禁止执行”),时间可被手动篡改
时区和精度要注意什么?
filemtime() 返回的时间戳本身无时区信息,是 UTC 秒数。但 date() 格式化时会受 PHP 默认时区影响(date_default_timezone_get()),可能导致显示时间与系统 ls -l 输出不一致。
Linux 下 ls -l 显示的是本地时区时间,而 PHP 的 date() 若未设时区,可能用 UTC 或系统默认,容易误判“差8小时”。
- 统一做法:用
date_default_timezone_set('Asia/Shanghai')显式设置(按实际环境) - 时间精度为秒级,无法获取毫秒;同一秒内多次保存,
filemtime()不会变化 - 某些 NFS 或容器卷可能存在时间同步延迟,读到的修改时间略滞后于真实写入时刻
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











