Pergunta

Eu tenho um script para fazer upload de arquivos e nomeá-los numericamente (digamos 1-15) e quando eu excluo um arquivo (digamos o número 5), quero que os arquivos sejam renomeados por 1-14. Isso funciona bem se eu excluir um arquivo 9 ou menos, se eu excluir algo com mais de 10 anos, ele apaga vários arquivos. Tanto quanto posso dizer, o problema não está com a exclusão, mas a renomeação

Aqui está o pedaço de script com o qual estou tendo problemas:

unlink($path.$img);

$files = natsort(glob("$path/*.jpg"));

$num = 1;

foreach($files as $file) {
  $new = 'photo' . $num . '.jpg'; 
  rename($file, dirname($file).'/'.$new);
  $num++;
}

Obrigado!

Foi útil?

Solução

Exemplo de trabalho do 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); 
?>

Outras dicas

Isso ocorre porque você está substituindo os arquivos enquanto renomeia.

Imagine a seguinte lista de arquivos depois de excluir o arquivo 11:

1
10
12
2
3
4
5
...

Se agora você começar a renomear, o seguinte acontece:

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

Uma solução: classifique sua matriz usando natsort($files) antes de renomear.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top