400 8949 560

NEWS/新闻

分享你我感悟

您当前位置> 主页 > 新闻 > 技术开发

获取 PHP 文件最后修改时间的正确方法

发表时间:2026-01-01 00:00:00

文章作者:心靈之曲

浏览次数:

本文介绍如何准确获取 php 文件的最后修改时间,指出 `stream_get_meta_data()` 无法返回文件时间戳的原因,并推荐使用 `filemtime()` 或 `fstat()` 等专用函数实现。

在 PHP 中,stream_get_meta_data() 返回的是流(stream)的运行时状态信息,例如是否阻塞、是否到达 EOF、封装器类型等,它不包含文件系统层面的元数据(如创建时间、最后访问时间、最后修改时间)。因此,即使你用 fopen() 打开了一个文件,调用 stream_get_meta_data() 也永远不会返回 mtime(最后修改时间)等关键时间戳字段——这正是你得到空结果的根本原因。

要获取文件的最后修改时间,应直接操作文件系统元数据。PHP 提供了多个高效且语义明确的函数:

推荐首选:filemtime()
最简洁、最常用的方式,直接传入文件路径即可:

$filename = 'index.php';
if (file_exists($filename)) {
    $lastModified = filemtime($filename);
    echo "最后修改时间:" . date('Y-m-d H:i:s', $lastModified);
} else {
    echo "文件不存在";
}

进阶选择:fstat()(需已打开文件句柄)
适用于你已在处理文件流且希望复用句柄的场景(如读取同时获取元数据):

$fp = fopen('index.php', 'r');
if ($fp) {
    $stats = fstat($fp);
    echo "最后修改时间:" . date('Y-m-d H:i:s', $stats['mtime']);
    fclose($fp);
}

⚠️ 注意事项:

  • filemtime() 和 fstat() 返回的时间戳均为 Unix 时间戳(秒级),需用 date() 或 DateTime 格式化;
  • 两者均受 PHP 进程的时区设置影响,建议通过 date_default_timezone_set() 统一时区;
  • 若文件被缓存(如 OPcache 启用),filemtime() 仍返回真实文件系统时间,不受字节码缓存干扰;
  • 权限不足或文件被锁定可能导致函数返回 false,务必检查返回值并做错误处理。

总结:不要混淆“流元数据”与“文件元数据”。对于获取最后修改时间这类需求,请始终优先使用 filemtime()(简单直接)或 fstat()(配合已有文件指针),它们专为文件系统属性设计,稳定、可靠、语义清晰。

立即学习“PHP免费学习笔记(深入)”;

相关案例查看更多