PHP numericamente rinominare tutti i file nella directory
Domanda
Ho uno script per caricare file e assegnare loro un nome numerico (diciamo 1-15) e quando elimino un file (numero diciamo 5) Voglio che i file da rinominare 1-14. Questo funziona bene se elimino un file di 9 e sotto, se elimino qualcosa di più di 10 cancella più file. Per quanto posso dire che il problema non è con l'eliminazione, ma la ridenominazione
Ecco il pezzo di sceneggiatura Ho problemi 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++;
}
Grazie!
Soluzione
esempio di lavoro da 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);
?>
Altri suggerimenti
Questo è dovuto al fatto che si sta sovrascrivendo i file mentre si rinomina.
Immaginate il seguente elenco di file dopo l'eliminazione di file 11:
1
10
12
2
3
4
5
...
Se ora si avvia la ridenominazione, accade quanto segue:
1 -> 1
10 -> 2
12 -> 3
2 -> already overwritten by 10!
Una soluzione:. Trova le array utilizzando natsort($files)
prima di rinominare