我有一个脚本来上传文件并用数字命名(比如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++;
}
谢谢!
答案 0 :(得分:3)
这是因为您在重命名时会覆盖文件。
在删除文件11之后想象一下以下文件列表:
1
10
12
2
3
4
5
...
如果您现在开始重命名,则会发生以下情况:
1 -> 1
10 -> 2
12 -> 3
2 -> already overwritten by 10!
一种解决方案:在重命名之前使用natsort($files)
对数组进行排序。
答案 1 :(得分:2)
来自php.net的工作示例
<?php
$path = "E:\\SERVER\\sudhir\\songs";
$dh = opendir($path);
$i=1;
while (($file = readdir($dh)) !== false) {
if($file != "." && $file != "..") {
echo "<br/>".substr($path."\\".$file, 0,-3)."_mysongs_mp3";
rename($path."\\".$file, substr($path."\\".$file, 0,-3)."_mysongs_mp3");
$i++;
}
}
closedir($dh);
?>