本文介绍如何准确识别并重命名指定目录下最新修改的文件(如将 file_0202.json 改为 file.json),解决因路径缺失、排序逻辑错误或正则误匹配导致的重命名失败问题。
在 PHP 中,仅依赖 scandir() 按字母降序排列文件名(如 file_0202.json、file_0101.json)无法可靠获取“最新文件”——因为文件名时间戳不等于实际修改时间,且 scandir() 不返回完整路径,导致 rename() 因相对路径错误而失败。
✅ 正确做法是:
以下是优化后的完整代码:
filemtime($a); // PHP 7+ 强烈推荐使用 <=>(飞船操作符)
});
$selected_file = $files[0];
$dirname = dirname($selected_file);
$basename = basename($selected_file);
// ? 精准替换:仅匹配文件名中最后一个下划线及其后、直到点号前的部分(避免误改路径或扩展名)
$new_basename = preg_replace('/_[^_.]*\.(?=[^.]*$)/', '.', $basename);
$new_filepath = $dirname . '/' . $new_basename;
// ✅ rename() 必须传入完整源路径和目标路径
if (rename($selected_file, $new_filepath)) {
echo "Renamed successfully: {$basename} → {$new_basename}";
} else {
echo "Failed to rename. Check permissions, file locks, or target existence.";
}
?>? 关键注意事项:
vs 创建时间,Windows 下语义不同); 通过以上方法,即可稳定、安全地重命名最新修改的文件,避免常见陷阱。