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


本文介绍如何准确获取 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免费学习笔记(深入)”;


# php  # 字节  # unix  # stream  # EOF  # 封装  # date  # fopen  # 指针  # 文件系统  # 句柄  # 的是  # 进阶  # 多个  # 已有  # 推荐使用  # 均为  # 这类  # 不受 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化76771 】 【 技术知识130152 】 【 IDC云计算60162 】 【 营销推广131313 】 【 AI优化88182 】 【 百度推广37138 】 【 网站推荐60173 】 【 精选阅读31334


相关推荐: 如何理解Go指针和内存分配关系_Go Pointer内存Model解析  php485读数据时阻塞怎么办_php485非阻塞读取设置技巧【详解】  为什么Go需要go mod文件_Go go mod文件作用说明  php删除数据怎么清空表_truncate与delete区别及用法【汇总】  如何使用正则表达式精确匹配最多含一个换行符的 start-end 区段  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  如何在 Django 中修改用户密码后保持会话不丢失  Win11怎样安装剪映专业版_Win11安装剪映教程【步骤】  php485能和物联网模块通信吗_php485对接NB-IoT模块实例【说明】  PHP主流架构如何做单元测试_工具与流程【详解】  Win11怎样安装搜狗输入法_Win11安装搜狗输入法教程【步骤】  Win11如何开启系统更新 Win11开启系统更新方法【步骤】  Win11怎么设置ip地址_Windows 11手动配置网络IP教程【详解】  php修改数据怎么改富文本_update更新html内容注意事项【说明】  Windows服务持续崩溃怎样修复_系统服务保护机制解析  php报错怎么查看_定位PHP致命错误与警告的方法【教程】  c++的位运算怎么用 与、或、异或、移位操作详解【底层知识】  Win11怎么开启HDR模式_Windows 11高动态范围显示设置指南【详解】  Mac如何使用听写功能_Mac语音输入打字【效率技巧】  Windows10怎么查看系统激活状态_Windows10激活状态查看方法【教程】  如何在JavaScript中动态拼接PHP的base_url与前端变量  Python与MongoDB NoSQL开发实战_文档模型与索引优化  Mac电脑进水了怎么办_MacBook进水后紧急处理方法【必看】  为什么Go建议使用error接口作为错误返回_Go Error接口设计原因说明  如何在Golang中实现CI/CD流水线自动化测试_Golang持续集成测试执行方法  php接口返回数据乱码怎么办_php接口调试编码问题解决【指南】  Python装饰器复用技巧_通用能力解析【教程】  Win11怎么清理C盘OneDrive缓存_Win11清理OneDrive缓存技巧【方法】  Win11相机打不开提示错误怎么修_相机权限开启与驱动修复【影像修复】  Windows电脑如何截屏?(四种快捷方法)  如何使用Golang实现容器健康检查_监控和自动重启  C#怎么使用委托和事件 C# delegate与event编程方法  php本地部署后session无法保存_session存储路径与权限设置技巧【技巧】  如何在 PHP 中按相同键合并两个关联数组为二维数组  如何在Golang中写入XML文件_生成符合规范的XML数据  Win11怎么查看硬盘型号_Windows 11检测硬盘信息方法【技巧】  如何使用Golang安装依赖库_管理模块和第三方包  Windows 10自带杀毒软件在哪_Windows 10打开和使用Windows安全中心  Win11怎么查看wifi信号强度_检测Windows 11无线网络质量方法【详解】  如何使用Golang实现路由参数绑定_使用Mux和Request解析路径变量  Win10文件历史记录怎么用 Win10开启自动备份文件教程【防丢】  如何在 Go 中创建包含映射(map)的切片(slice)结构  Win11怎么更改鼠标指针方案_Windows11自定义鼠标光标样式与大小  Windows10怎么用“讲述人”读屏辅助 Windows10轻松使用开启讲述人朗读屏幕文字帮助视障用户【教程】  Windows10如何重置此电脑_Windows10电脑重置方法【步骤】  Windows10系统怎么查看显卡型号_Win10 dxdiag显示选项卡  Win11怎么关闭自动调节亮度_Windows11禁用内容自适应亮度  Windows10电脑怎么设置文件权限_Win10安全选项卡所有者修改  如何在Golang中使用log包输出不同级别日志_Golang log日志管理与分类  Win11怎么关闭搜索历史 Win11清除搜索框最近记录【隐私】 

 2026-01-01

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

致胜网络推广营销网


致胜网络推广营销网

致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 915688610

 17370845950

 915688610@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.