获取 PHP 文件最后修改时间的正确方法
技术百科
心靈之曲
发布时间:2026-01-01
浏览: 次 本文介绍如何准确获取 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免费学习笔记(深入)”;
# 的是
# 这类
# 多个
# 进阶
# 已有
# 推荐使用
# 不受
# 均为
# 字节
# 指针
# stream
# 封装
# php
# 文件系统
# 句柄
# fopen
# unix
# date
# EOF
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- MySQL 中使用 IF 和 CASE 实现查询字
- Laravel 查询 JSON 列:高效筛选包含数
- 如何在Golang中实现邮件发送功能_Golang
- Win11怎么关闭触摸键盘图标_Windows11
- 如何使用Golang优化模块引入路径_Golang
- 如何在Golang中处理云原生事件_使用Event
- 如何在 Go 应用中实现自动错误恢复与进程重启机制
- Python函数缓存机制_lru_cache解析【
- Windows10怎么卸载预装软件_Windows
- php8.4匿名类怎么用_php8.4匿名类创建与
- 如何使用Golang实现文件追加操作_向已有文件追
- 使用类变量定义字符串常量时的类型安全最佳实践
- Windows笔记本无法进入睡眠模式怎么办?(电源
- Python网络超时处理_健壮性设计说明【指导】
- Windows执行文件被SmartScreen拦截
- Mac怎么设置登录项_Mac管理开机自启动程序【教
- Windows10电脑怎么设置电源按钮_Win10
- php报错怎么查看_定位PHP致命错误与警告的方法
- 如何使用Golang recover捕获panic
- Win10电脑怎么设置休眠快捷键_Windows1
- Windows10系统怎么查看显卡驱动_Win10
- Drupal 中渲染节点时出现 HTML 标签嵌套
- 小程序里php怎么变mp4_小程序调用php生成m
- 如何使用Golang template生成文本模板
- Win11怎么开启游戏模式_Windows11优化
- 如何在网页无标准表格标签时高效提取结构化数据
- Win11怎么更改电脑名称_Windows 11修
- 如何在Golang中捕获HTTP服务器错误_Gol
- php增删改查需要哪些扩展_开启mysqli或pd
- Win11怎么关闭搜索历史_Win11清除任务栏搜
- 如何使用Golang处理网络超时错误_Golang
- Python配置文件操作教程_JSONINIYAM
- php485函数怎么捕获异常_php485错误处理
- php485在macos下怎么配置_php485
- 如何在 Pandas 中按元素交集合并两列字符串
- Win11怎么关闭透明效果_Windows11辅助
- 手机php文件怎么变成mp4_安卓苹果打开php转
- Mac如何查看电池健康百分比_Mac系统信息电源检
- Windows10如何更改系统字体大小_Win10
- mac怎么安装pip_MAC Python pip
- windows如何备份注册表_windows导出和
- C#如何在一个XML文件中查找并替换文本内容
- 如何在Golang中使用container/hea
- Mac的Time Machine怎么用_Mac系统
- 如何使用Golang开发简单的聊天室消息存储_Go
- Windows10系统怎么查看设备管理器_Win1
- Win11怎么关闭资讯和兴趣_Windows11任
- 如何在 Python 中将 ISO 8601 时间
- php中self::能调用子类重写的方法吗_静态绑
- Mac的“调度中心”与“空间”怎么用_Mac多桌面

QQ客服