获取 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; ?>
】
相关推荐
- php下载安装包怎么选_threadsafe与nt
- Win11怎么设置环境变量_Win11配置Path
- 如何在Golang中解压文件_Golang com
- Windows11怎样开启游戏模式_Windows
- windows 10应用商店区域怎么改_windo
- Win11怎么更改电脑密码_Windows 11修
- php修改数据怎么改富文本_update更新htm
- Windows10电脑怎么设置防火墙出站规则_Wi
- Win11怎么关闭通知消息_屏蔽Windows 1
- 为什么Go需要go mod文件_Go go mod
- Go 中 := 短变量声明的类型推导机制详解
- C++如何解析JSON数据?(nlohmann/j
- PHP接收参数值为空怎么办_判断和处理空参数方法说
- Windows10如何更改桌面背景_Win10个性
- Win10怎样清理C盘爱奇艺缓存_Win10清理爱
- 作用域操作符会影响性能吗_php静态调用性能分析【
- Python网络超时处理_健壮性设计说明【指导】
- Windows资源管理器总是卡顿或重启怎么办?(修
- Python装饰器复用技巧_通用能力解析【教程】
- Win11如何隐藏桌面图标 Win11一键隐藏/显
- c# await 一个已经完成的Task会发生什么
- 如何使用Golang reflect检查方法数量_
- php转mp4怎么保留字幕_php处理带字幕视频转
- Win11任务栏颜色怎么改_Win11自定义任务栏
- php和redis连接超时怎么办_phpredis
- Win11如何关闭游戏模式 Win11禁用Xbox
- 如何在Windows上设置闹钟和计时器_系统自带的
- Win11怎么激活Windows10_Win11激
- Win11怎么修改DNS服务器 Win11设置DN
- Python配置文件操作教程_JSONINIYAM
- 如何在Golang中定义接口_抽象方法和多态实现
- Win11任务栏天气怎么关闭 Win11隐藏天气小
- Mac版Final Cut Pro入门_Mac视频
- Drupal 中渲染节点时出现 HTML 标签嵌套
- 如何在 Go 中正确测试带 Cookie 的 HT
- 如何在Golang中实现文件下载_Golang文件
- PHP的FastAdmin架构适合二次开发吗_特点
- LINUX如何查看文件类型_Linux中file命
- Win10如何卸载Skype_Win10卸载Sky
- Win11怎样安装剪映专业版_Win11安装剪映教
- Win11怎么关闭任务栏小组件_Windows11
- Win11怎样激活系统密钥_Win11系统密钥激活
- Win11时间不对怎么同步_Win11自动校准互联
- Go语言中slice追加操作的底层共享机制详解
- 如何高效删除 NumPy 二维数组中所有元素相同的
- 如何使用Golang实现Web表单数据绑定_自动映
- Win10电脑怎么设置IP地址_Windows10
- mac怎么看硬盘大小_MAC查看磁盘存储空间与文件
- C++如何使用std::async进行异步编程?(
- php订单日志怎么在swoole写_php协程sw

QQ客服