本文介绍如何准确获取 php 文件的最后修改时间,指出 `stream_get_meta_data()` 无法返回文件时间戳的原因,并推荐使用 `filemtime()` 或 `fstat()` 等专用函数实现。
在 PHP 中,stream_get_meta_data() 返回的是流(stream)的运行时状态信息,例如是否阻塞、是否到达 EOF、封装器类型等,它不包含文件系统层面的元数据(如创建时间、最后访问时间、最后修改时间)。因此,即使你用 fopen() 打开了一个文件,调用 stre
am_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()(配合已有文件指针),它们专为文件系统属性设计,稳定、可靠、语义清晰。
立即学习“PHP免费学习笔记(深入)”;