PHP以数字方式重命名目录中的所有文件
我有一个脚本来上传文件并以数字命名(例如 1-15),当我删除文件(例如数字 5)时,我希望将文件重命名为 1-14。如果我删除 9 及以下的文件,这可以正常工作,如果我删除超过 10 的文件,它会删除多个文件。据我所知,问题不在于删除,而在于重命名
这是我遇到问题的脚本片段:
unlink($path.$img);
$files = natsort(glob("$path/*.jpg"));
$num = 1;
foreach($files as $file) {
$new = 'photo' . $num . '.jpg';
rename($file, dirname($file).'/'.$new);
$num++;
}
谢谢!
I have a script to upload files and name them numerically (say 1-15) and when I delete a file (say number 5) I want the files to be renamed 1-14. This works okay if I delete a file 9 and under, if I delete anything over 10 it erases multiple files. As far as I can tell the problem isn't with the deletion but the renaming
Here's the piece of script I'm having trouble with:
unlink($path.$img);
$files = natsort(glob("$path/*.jpg"));
$num = 1;
foreach($files as $file) {
$new = 'photo' . $num . '.jpg';
rename($file, dirname($file).'/'.$new);
$num++;
}
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这是因为您在重命名时覆盖了文件。
想象一下删除文件 11 后的以下文件列表:
如果您现在开始重命名,则会发生以下情况:
一种解决方案:在重命名之前使用
natsort($files)
对数组进行排序。This is because you are overwriting files while you are renaming.
Imagine the following file list after you deleted file 11:
If you now start renaming, the following happens:
One solution: Sort your array using
natsort($files)
before renaming.来自 php.net 的工作示例
working example from php.net