获取 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; ?>
】
相关推荐
- Win11怎么设置虚拟内存_Windows 11优
- c++ unordered_map怎么用 c++哈
- Win11怎么设置默认输入法 Win11固定中文输
- Python日志系统设计与实现_高可观测性架构实战
- 如何在Golang中使用container/hea
- Windows10系统怎么查看CPU温度_Win1
- PythonPandas数据分析项目教程_时间序列
- 如何在 Go 中判断变量是否为函数类型
- 为什么本地php环境运行php脚本卡顿_php执行
- LINUX怎么设置系统语言_LINUX修改中文环境
- Python数据抓取合法性_合规说明【指导】
- c++怎么处理多线程死锁_c++ lock_gua
- Windows蓝屏错误0x0000002C怎么解决
- Python解释执行模型_字节码流程说明【指导】
- c++怎么编写动态链接库dll_c++ __dec
- php订单日志怎么按状态筛选_php筛选不同状态订
- php订单日志权限怎么设_php订单日志文件权限设
- 如何在Golang中捕获JSON序列化错误_Gol
- Win10怎么关闭自动更新错误弹窗_Win10策略
- 如何在 IIS 上为 ASP.NET 6 应用排除
- Win11怎么开启剪贴板历史记录_Windows1
- Win10电脑怎么设置网络名称_Windows10
- Win11怎么关闭搜索历史_Win11清除任务栏搜
- Python函数缓存机制_lru_cache解析【
- Win10怎样清理C盘阿里旺旺缓存_Win10清理
- 如何使用Golang进行HTTP服务性能测试_测量
- Python对象比较与排序_集合使用说明【指导】
- 如何使用Golang实现微服务事件驱动_使用消息总
- Windows怎样关闭开始菜单广告_Windows
- Windows 10怎么录屏_Windows 10
- Win10怎样清理C盘Steam游戏缓存_Win1
- 如何使用Golang实现跨域请求支持_Golang
- Python包结构设计_大型项目组织解析【指导】
- Win11关机快捷键是什么_Win11快速关机方法
- Linux如何安装Golang环境_Linux下G
- Python大型项目拆分策略_模块化解析【教程】
- Flask 表单数据通过 SMTP 发送邮件的完整
- Win10如何更改电脑休眠时间_Windows10
- Win11怎么恢复旧版开始菜单_通过软件还原Win
- C++中的std::shared_from_thi
- Win11如何设置鼠标灵敏度_Win11鼠标灵敏度
- Python邮件系统自动化教程_批量发送解析与模板
- Win11怎么关闭自动更新 Win11永久关闭系统
- Dapper的Execute方法的返回值是什么意思
- 如何在Golang中实现RPC异步返回_Golan
- Windows10系统怎么查看防火墙状态_Win1
- Python文件和流处理指南_高效读写大体积数据文
- Win11怎么查看已连接wifi密码 Win11查
- Python异步编程高级项目教程_asyncio协
- php在Linux怎么部署_LNMP环境搭建PHP

QQ客服