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++;
}
Спасибо!
Решение
Рабочий пример от 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);
?>
Другие советы
Это потому, что вы перезаписываете файлы, пока вы переименяете.
Представьте себе следующий список файлов после удаления файла 11:
1
10
12
2
3
4
5
...
Если вы сейчас начнете переименовать, происходит следующее:
1 -> 1
10 -> 2
12 -> 3
2 -> already overwritten by 10!
Одно решение: сортировать свой массив, используя natsort($files)
перед переименованием.
Не связан с StackOverflow