PHP численно переименует все файлы в каталоге

StackOverflow https://stackoverflow.com/questions/4207319

  •  25-09-2019
  •  | 
  •  

Вопрос

У меня есть сценарий для загрузки файлов и имени их численно (скажем 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) перед переименованием.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top