Je pense que c'est votre meilleur pari (voir revisions pour les versions précédentes):
$files = glob('/path/to/dir/*'); // get all files in folder
natsort($files); // sort
$lastFile = pathinfo(array_pop($files)); // split $lastFile into parts
$newFile = $lastFile['filename'] +1; // increase filename by 1
if(file_exists("/path/to/dir/$newFile")) { // do not write file if it exists
die("$newFile aready exists");
}
file_put_contents("/path/to/dir/$newFile", 'stuff'); // write new file
Tant que vos noms de fichiers dans le dossier commencer par les nombres, cela devrait toujours écrire le nom de fichier le plus élevé incrémenté par un, par exemple
1,5,10 => writes file 11
1.txt, 5.gif, 10.jpg => writes file 11
1, 5.txt, 10_apple.txt => writes file 11
S'il y a un fichier pas en commençant par un numéro, l'approche ci-dessus ne fonctionnera pas, parce que les numéros sont classés avant les caractères et donc rien ne serait écrit par exemple
1,5,10,foo => foo+1 equals 1, already exists, nothing written
Vous pouvez contourner ce problème en changeant le modèle pour glob à /path/[0-9]*
, qui serait alors correspondre uniquement les fichiers commençant par un numéro. Cela devrait être assez solide alors.
Remarquenatsort
se comporte différemment selon les systèmes d'exploitation. Ce qui précède fonctionne très bien sur mon ordinateur Windows, mais vous voudrez vérifier l'ordre de tri qui en résulte pour le faire fonctionner pour votre machine spécifique.
Voir le manuel pour plus d'informations sur l'utilisation de glob()
, natsort()
et pathinfo()
;
si 1.jpg et 2.gif habitude importance ou ne sont u en supposant qu'ils ont même extension? – ajsie
L'astérisque dans glob correspond à tous les fichiers du dossier, indépendamment de l'extension. – Gordon
Si vous avez supprimé un fichier (qui était obsolète ou quelque chose), alors cela échoue, car le nombre de fichiers est différent de la dernière 'numéro d'identification' – Veger