PHP численно переименовывает все файлы в каталоге - PullRequest
0 голосов
/ 17 ноября 2010

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

Спасибо!

Ответы [ 2 ]

3 голосов
/ 17 ноября 2010

Это потому, что вы перезаписываете файлы во время переименования.

Представьте себе следующий список файлов после удаления файла 11:

1
10
12
2
3
4
5
...

Если вы сейчас начнете переименовывать, произойдет следующее:

1 -> 1
10 -> 2
12 -> 3
2 -> already overwritten by 10!

Одно решение: отсортируйте массив, используя natsort($files) перед переименованием.

2 голосов
/ 17 ноября 2010

рабочий пример с 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); 
?>
...