Pregunta

Tengo un script para subir archivos y nombrarlos numéricamente (digamos, 1-15) y cuando se borra un archivo (por ejemplo el número 5) Quiero que los archivos que se renombraron 1-14. Esto funciona bien si elimino un archivo de 9 años o menos, si nada de eliminación de más de 10 borra los archivos múltiples. Por lo que yo puedo decir que el problema no es con la supresión, pero el cambio de nombre

Aquí está la pieza de la escritura que estoy teniendo problemas con:

unlink($path.$img);

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

$num = 1;

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

Gracias!

¿Fue útil?

Solución

ejemplo de trabajo de 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); 
?>

Otros consejos

Esto es porque va a sobrescribir los archivos mientras se está cambiando el nombre.

Imagínese la lista de archivos siguiente después de que ha borrado de archivos 11:

1
10
12
2
3
4
5
...

Si inicia ahora el cambio de nombre, ocurre lo siguiente:

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

Una solución:. Ordenar su matriz mediante natsort($files) antes de cambiar el nombre

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top