如何使用 PHP 正确重命名文件夹中最新修改的文件
发布时间 - 2026-01-02 00:00:00 点击率:次本文详解如何通过 glob() 结合 usort() 和 filemtime() 精准定位并重命名指定目录下最新修改的文件,避免 scandir() 仅按名称排序导致的逻辑错误,并提供安全可靠的正则替换与路径处理方案。
在 PHP 中,仅依赖 scandir() 按字典序降序排列(如 SCANDIR_SORT_DESCENDING)并不能保证获取“最新添加/修改”的文件——因为
文件名(如 file_0202.json)的字母顺序与实际时间顺序无关。正确做法是基于文件系统元数据(如最后修改时间)进行排序。
以下为推荐实现方案:
filemtime($a); // PHP 7+ 太空船操作符,简洁安全
});
$selected_file = $files[0];
$dir_path = dirname($selected_file);
$basename = basename($selected_file);
// 3. 安全地构造新文件名:仅替换文件名中的下划线编号部分,不触碰路径
$new_basename = preg_replace('/^([^_]+)_([^_.]*)\.([^.]+)$/', '$1.$3', $basename);
$new_filepath = $dir_path . '/' . $new_basename;
// 4. 执行重命名(注意:源和目标必须在同一文件系统,且目标不可存在)
if (rename($selected_file, $new_filepath)) {
echo "Renamed successfully: {$basename} → {$new_basename}";
} else {
echo "Failed to rename: " . error_get_last()['message'] ?? 'Unknown error';
}
?>✅ 关键改进说明:
- 使用 glob() 返回带路径的完整文件名,避免 scandir() 返回相对名后 rename() 因路径缺失而失败;
- usort() + filemtime() 确保按真实修改时间排序,而非文件名字符串;
- 正则 /^([^_]+)_([^_.]*)\.([^.]+)$/ 更精准:捕获主名、下划线后编号、扩展名三部分,仅替换中间编号段,防止误改路径或嵌套下划线(如 data_v2_backup_01.json);
- 显式拼接 $dir_path . '/' . $new_basename,确保目标路径有效;
- 增加空文件检查与错误提示,提升健壮性。
⚠️ 注意事项:
- rename() 要求源与目标位于同一挂载点(同文件系统),跨分区需用 copy() + unlink();
- 目标文件若已存在,rename() 将失败(PHP 不自动覆盖),建议提前 if (file_exists($new_filepath)) unlink($new_filepath);;
- 生产环境应校验 $selected_file 是否为真实文件(is_file())、是否可读写(is_writable());
- 若需按“创建时间”排序(Windows 支持,Linux 通常不保留),可用 filectime() 替代 filemtime(),但兼容性更低。
掌握此模式后,你可轻松扩展为批量处理最新 N 个文件、按时间窗口筛选或集成到定时任务中。
# php
# linux
# js
# json
# windows
# ai
# win
# 排列
# if
# 字符串
# copy
# 下划线
# 文件系统
# 降序
# 目录下
# 扩展名
# 你可
# 并不能
# 而非
# 排在
# 首位
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧
Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧
laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程
如何快速配置高效服务器建站软件?
Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践
网站建设保证美观性,需要考虑的几点问题!
Laravel如何实现一对一模型关联?(Eloquent示例)
jQuery 常见小例汇总
Win11怎么设置默认图片查看器_Windows11照片应用关联设置
如何快速搭建二级域名独立网站?
如何用y主机助手快速搭建网站?
Laravel如何为API生成Swagger或OpenAPI文档
Python并发异常传播_错误处理解析【教程】
Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
Laravel如何处理和验证JSON类型的数据库字段
PythonWeb开发入门教程_Flask快速构建Web应用
Laravel怎么清理缓存_Laravel optimize clear命令详解
如何解决hover在ie6中的兼容性问题
如何快速启动建站代理加盟业务?
Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验
Laravel如何实现API资源集合?(Resource Collection教程)
制作企业网站建设方案,怎样建设一个公司网站?
百度浏览器网页无法复制文字怎么办 百度浏览器复制修复
Android GridView 滑动条设置一直显示状态(推荐)
历史网站制作软件,华为如何找回被删除的网站?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
浅述节点的创建及常见功能的实现
网站优化排名时,需要考虑哪些问题呢?
Win11怎么开启自动HDR画质_Windows11显示设置HDR选项
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
C语言设计一个闪闪的圣诞树
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
linux top下的 minerd 木马清除方法
Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区
常州企业网站制作公司,全国继续教育网怎么登录?
中山网站制作网页,中山新生登记系统登记流程?
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
Python图片处理进阶教程_Pillow滤镜与图像增强
如何将凡科建站内容保存为本地文件?
php 三元运算符实例详细介绍
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
如何快速建站并高效导出源代码?
b2c电商网站制作流程,b2c水平综合的电商平台?
Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】
如何撰写建站申请书?关键要点有哪些?
简历在线制作网站免费版,如何创建个人简历?
如何在VPS电脑上快速搭建网站?
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程

