PHP numéricamente cambiar el nombre de todos los archivos en el directorio
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!
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