Question

J'ai un script pour télécharger des fichiers et de les nommer numériquement (par exemple 1-15) et lorsque je supprime un fichier (dire le numéro 5) Je veux que les fichiers à renommer 1-14. Cela fonctionne bien si je supprime un fichier 9 et sous, si je supprime quoi que ce soit plus de 10, il efface plusieurs fichiers. Pour autant que je peux dire que le problème est pas avec la suppression, mais le changement de nom

Voici le morceau de script que je vais avoir des problèmes avec:

unlink($path.$img);

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

$num = 1;

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

Merci!

Était-ce utile?

La solution

exemple de travail 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); 
?>

Autres conseils

Ceci est parce que vous écrasez les fichiers pendant que vous renomme.

Imaginez la liste des fichiers suivante après avoir supprimé le fichier 11:

1
10
12
2
3
4
5
...

Si vous commencez maintenant changement de nom, ce qui suit se produit:

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

Une solution:. Trier votre tableau en utilisant natsort($files) avant de renommer

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top