获取 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


相关推荐: 如何在Golang中处理二进制数据_Golang io与encoding/binary二进制操作方法  Win11玩游戏全屏闪退怎么办_Win11全屏优化禁用设置【教程】  Win11怎么设置ipv4地址_Windows 11固定静态IP地址配置教程【详解】  PHP接收参数值为空怎么办_判断和处理空参数方法说明【说明】  c++怎么使用std::filesystem遍历文件夹_c++ 递归查找文件与权限修改【技巧】  Windows蓝屏错误0x0000002C怎么解决_系统IO异常排查方法  如何使用Golang包导出规则_控制函数和变量可见性  Python数据挖掘核心算法实践_聚类分类与特征工程  如何减少Golang内存碎片化_Golang内存分配与回收优化方法  Windows 11怎么设置默认解压软件_Windows 11为ZIP/RAR文件指定默认打开程序  Win11如何更改用户账户文件夹名称 Win11修改C:Users用户名【终极教程】  Win10怎样卸载TeamViewer_Win10卸载TeamViewer步骤【教程】  Mac如何彻底清理浏览器缓存?(Safari与Chrome)  php485函数怎么捕获异常_php485错误处理机制设置技巧【操作】  Win11怎么开启游戏工具栏_Windows11 Xbox Game Bar快捷键  Win11怎么设置声音输出设备_Windows11音量合成器单独调节应用  如何在 Django 中修改用户密码后保持会话不丢失  Windows10电脑怎么设置防火墙出站规则_Win10禁止程序联网教程  php8.4如何实现队列任务_php8.4redis队列简单实现方法【教程】  Python如何创建带属性的XML节点  Win10怎么卸载剪映_Win10彻底卸载剪映方法【步骤】  Win11怎么关闭触摸屏_禁用Win11笔记本触摸屏功能设置【教程】  mac怎么安装pip_MAC Python pip安装工具与升级方法【详解】  Win10怎么关闭自动更新错误弹窗_Win10策略屏蔽失败提示减少干扰【防护】  Win11怎么设置开机问候语_自定义Win11锁屏提示信息【技巧】  Win11鼠标灵敏度怎么调 Win11鼠标指针移动速度设置【教程】  Win10怎样设置闹钟贪睡时间 Win10闹钟贪睡时长设置【步骤】  c# await 一个已经完成的Task会发生什么  MAC怎么用连续互通相机里的“桌上视角”_MAC在视频通话中同时展示人脸和桌面  Python生成器表达式内存优化_惰性计算说明【指导】  Python包结构设计_大型项目组织解析【指导】  php下载安装后swoole扩展怎么安装_异步框架支持【汇总】  如何在Golang中指定模块版本_使用go.mod控制版本号  Python项目回滚策略_发布安全说明【指导】  Mac如何修改Hosts文件?(本地开发与屏蔽网站)  Drupal 中 HTML 链接被双重转义导致渲染异常的解决方案  Windows10如何彻底关闭自动更新_Win10服务与组策略双重禁用  PHP 中 require() 语句返回值的用法详解  如何在 Pandas 中按元素交集合并两列字符串  如何使用Golang实现基本类型比较_Golang比较操作符使用方法  PythonPandas数据分析教程_数据清洗与处理技巧  Win11怎么清理C盘系统日志_Win11清理系统日志文件【步骤】  如何关闭Win10自动更新更新_Win10系统自动更新双重关闭技巧  Windows10怎样设置家长控制_Windows10家长控制设置方法【指南】  LINUX下如何配置VLAN虚拟局域网_在LINUX交换机与服务器上的实现  网站体验不好=浪费钱:如何提升-用户体验效果差  Win11任务栏怎么放到顶部_Win11修改任务栏位置方法【详细】  C#如何序列化对象为XML XmlSerializer用法  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  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.