numéroter fichiers en commençants en 00001 (exempl)

Eléphant du PHP | 135 Messages

11 févr. 2007, 22:53

Bonjour tous le monde,

J'ai besoin de renommer et de numéroter une suite de fichiers.
la variable "$i" incrémente la fin des fichiers par un nombre.
Il faudrait que je retrouve les fichier toujour dans l'ordre croissant.

C'est à dire: 01,02,...,09,10,11,...
et non pas : 1,10,...,19,2,20,21,...,29,3,30,31,...

Car si j'ai besoin de les renommer, il prend les fichiers dans l'ordre ou ils viennent mais pas dans l'ordre croissant.
Vous vous apercevez donc qu'il va renommer le fichier :
"nom du fichier10"
en
"nom du fichier2"

et il y a un ordre à respecter avec les images, et j'aimerais pouvoir mettre un ou plusieurs zéro avant le chiffre 1 pour que le nombre "10" soit réellement en 10ème position dans le dossier.

voici le code que j'ai bidouillé, je ne vois pas comment mettre ce zéro devant le chiffre de la variable"$i";
<?php

$i=1;
$chemin="dossier/";

if ($handle = opendir('dossier')) {
   while (false !== ($file = readdir($handle))) {
       if ($file != "." && $file != "..") {
	    $oldfile=$chemin.$file;
            $newfile= $chemin."nom de fichier".$i.".jpg";
	    if (eregi( ".jpg$", $oldfile)){
		rename ("$oldfile", "$newfile");
		echo'<br>---new name:'.$i.'<br>';
		$i++;
	    }
        }
    }
   closedir($handle);
}
?>
Ma démarche n'est peut-être pas bonne, n'ésitez pas à me le dire je vais pas me vexer :)

Merci d'avance pour vos conseils, j'espère que mes explications sont assez claire.

Cheers
David.
Des noeuds au cerveau!

Eléphant du PHP | 259 Messages

12 févr. 2007, 00:15

hello,

sprintf() est bon pour ce que tu as !

ViPHP
ViPHP | 1961 Messages

12 févr. 2007, 00:17

Bonsoir,

La fonction str_pad() te permet de faire ce que tu souhaites.

Sinon tu as aussi la solution sprintf().
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

12 févr. 2007, 01:55

Il faudrait que je retrouve les fichier toujour dans l'ordre croissant.

C'est à dire: 01,02,...,09,10,11,...
et non pas : 1,10,...,19,2,20,21,...,29,3,30,31,...
Bonjour,

Si tu dois récupérer tes fichiers "dans l'ordre" via PHP, alors tu peux les numéroter 1, 2, 3..., 10, 11 car avec la fonction natsort tu les récupérera correctement:
http://fr.php.net/natsort
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 135 Messages

12 févr. 2007, 02:05

Merci Jules Petibidon et Ajoloca

J'ai réussi avec str_pad
<?php

$i=1;
$chemin="dossier/";

if ($handle = opendir('dossier')) {
   while (false !== ($file = readdir($handle))) {
       if ($file != "." && $file != "..") {
        $r = str_pad($i, 5, "0", STR_PAD_LEFT); 
        $oldfile=$chemin.$file;
        $newfile= $chemin."nom de fichier".$r.".jpg";
        $afficheImg= "nom de fichier".$r.".jpg";
        if (eregi( ".jpg$", $oldfile)){
        rename ("$oldfile", "$newfile");
        echo'<br>---new name:'.$afficheImg.'<br>';
        $i++;
        }
        }
    }
   closedir($handle);
}
?> 
ça marche bien ouf!

Si ça vous dérange pas j'aimerais quand même continuer un petit peu parcequ'avec la Fonction printf j'ai eu des petits souci et j'aimerais bein savoir pourquoi.

Voilà le code avec lequel j'ai obtenu ceci.

00014
<?php
$r='1';
$i= printf("%04d",$r);
echo $i;
?> 
Je comprends pas pourquoi il met le chiffre 4 après le 1
comprenez mon interrogation car le code est fort simple ma fois, mais voilà pfff. pour moi cette magie du quatre est tout de même un mystère.

Merci d'avance
Des noeuds au cerveau!

Eléphant du PHP | 135 Messages

12 févr. 2007, 02:07

hi @rthur
je viens juste de voir ton post.

Natsort me semble bien intéressant. je jete un coup d'oeil.

Merci David.
Des noeuds au cerveau!

ViPHP
ViPHP | 1961 Messages

12 févr. 2007, 09:42

Bonjour,
Je comprends pas pourquoi il met le chiffre 4 après le 1
Je n'ai pas d'explication, normalement ça devrait donner ce que tu attends.

Essaie de le forcer (donner explicitement le caractère de remplissage) comme ceci (l'apostrophe en plus)
printf("%'04d", 1);
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein