Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1515 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  renommer un fichier uploadé

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

renommer un fichier uploadé

n°1555961
pimsa
Posté le 06-05-2007 à 12:47:06  profilanswer
 

Bonjour,
 
j'ai codé un petit formulaire d'upload mais j'aimerai faire renommer automatiquement le nom du fichier (image) lorsqu'il est uploadé.
l'image est uploadée dans un dossier appellé "img" qui contient des images telles que:
1.jpg, 2.jpg, 3.jpg, 4.jpg, 5.jpg, ..., 88.jpg, 89.jpg, ... etc
 
Il faudrait que le nom du fichier soit "dernier numéro de l'image"+1.
exemple: si la dernière image est 312.jpg, le nom attribué devra être 313.jpg.
 
 
Puis-je avoir une esquisse du code et fonctions qui vont ouvrir le dossier img, parcourir les images pour en extraire uniquement le numéro (i.e "312".jpg) puis renommer le fichier uploadé?
 
merci d'avance.

mood
Publicité
Posté le 06-05-2007 à 12:47:06  profilanswer
 

n°1555962
naeh
Posté le 06-05-2007 à 12:53:28  profilanswer
 

salut :)
 
donc pour ça, perso je ne vois pas comment php pourrait savoir que t'as 312 est la dernière.
tu peux aussi les compter et faire un +1, mais si un jours tu en supprimes, je te dis pas le bordel (tu supprime une, au prochain upload la dernière sera ecrasée).
 
moi je vois bien un tri par nom, tu choppe le plus gros et tu fais un +1
 
:)

n°1555966
pimsa
Posté le 06-05-2007 à 13:04:08  profilanswer
 

naeh a écrit :


moi je vois bien un tri par nom, tu choppe le plus gros et tu fais un +1
:)


comment?

n°1555969
naeh
Posté le 06-05-2007 à 13:17:56  profilanswer
 

tu parcours ton répertoire, tu mets les fichiers dans un tableau, tu lance un sort du tableau (php.net est ton ami pour les fonctions de tri de tableaux).
 
tu choppe le dernier enregistrement du tableau (forcément un 312 dans ton cas) et l'image uploadée aura ça + 1.
 
Exemple :

Code :
  1. $rep = "NOTRE/REPERTOIRE/";
  2. $dir = opendir($rep);
  3. while ($f = readdir($dir)){
  4. if(is_file($rep.$f)){
  5.  $liste[] = "$f"; //le nom du fichier
  6. }
  7. }


 
il te reste a trier $liste
à mon avis ça marche comme méthode, mais je trouve que c'est un peu du bidouillage, donc a toi de voir soit tu prends, soit tu cherche plus propre/performant :)


Message édité par naeh le 06-05-2007 à 13:20:37
n°1555970
c0wb0y
:d
Posté le 06-05-2007 à 13:20:11  profilanswer
 

http://fr.php.net/max
 
S'il faut, tu splites tes chaines de caractères et tu recomposes le tableau avec uniquement les valeurs numérique.
 
Sinon, un tri alphabétique du tableau (voir du coté des fonction "sort" ) et tu récupère le dernier élément du tableau +1.

n°1555980
dwogsi
Défaillance cérébrale...
Posté le 06-05-2007 à 13:39:47  profilanswer
 

Ou encore :

Code :
  1. $rep = './img/';
  2. $i=0;
  3. while(file_exists($rep.$i.'.jpg'))$i++
  4. // $i a pour valeur le premier numéro libre


Par contre là si tu en supprime un, il sera recréé par la suite.


Message édité par dwogsi le 06-05-2007 à 13:44:20

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1555981
pimsa
Posté le 06-05-2007 à 13:40:58  profilanswer
 

ok, la méthode du array me convient, sauf que j'ai du mal à en extraire la valeur maxi, autant avant sort() que max(), vu que ça me retourne le "index.html" que j'ai mis dans le repertoire. [:hahaguy]
ensuite à priori j'ai juste à faire un explode avec le ".jpg" pour extraire le numéro et faire un +1

n°1555984
naeh
Posté le 06-05-2007 à 13:44:28  profilanswer
 

pour n'avoir que les images (donc pas le index.html) tu rajoute dans le if qui parcours le rep une condition par rapport a l'extension (tu la choppe avec strpos je crois) genre && $ext == 'jpg' et là t'es sur que dans ton tableau y'a que les images :)

n°1555986
dwogsi
Défaillance cérébrale...
Posté le 06-05-2007 à 13:46:26  profilanswer
 

Code :
  1. $rep = "NOTRE/REPERTOIRE/";
  2. $dir = opendir($rep);
  3. while ($f = readdir($dir)){
  4. if(is_file($rep.$f) && substr($file,-3,3)=='jpg'){
  5.  $liste[] = substr($f,0,strlen($f)-4); //le nom du fichier sans l'extension
  6. }
  7. }
  8. $prochain = max($liste)+1;

Message cité 1 fois
Message édité par dwogsi le 06-05-2007 à 13:48:34

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1555993
pimsa
Posté le 06-05-2007 à 13:55:12  profilanswer
 

dwogsi a écrit :

Code :
  1. $rep = "NOTRE/REPERTOIRE/";
  2. $dir = opendir($rep);
  3. while ($f = readdir($dir)){
  4. if(is_file($rep.$f) && substr($file,-3,3)=='jpg'){
  5.  $liste[] = substr($f,0,strlen($f)-4); //le nom du fichier sans l'extension
  6. }
  7. }
  8. $prochain = max($liste)+1;



 
voilà ça c'est très proche de ce que je veux faire :)
sauf que:
 
Warning: Wrong parameter count for max() in C:\wamp\www\monsite\test\test.php on line 12
(ligne 12 contient ---> $prochain = max($liste)+1;)
j'ai essayé avec $prochain = max($liste); même erreur.
 
 :??:
 
edit:
print_r($liste);
ne retourne rien.


Message édité par pimsa le 06-05-2007 à 13:58:42
mood
Publicité
Posté le 06-05-2007 à 13:55:12  profilanswer
 

n°1555994
dwogsi
Défaillance cérébrale...
Posté le 06-05-2007 à 13:58:53  profilanswer
 

Code :
  1. $rep = "NOTRE/REPERTOIRE/";
  2. $liste = array();
  3. $dir = opendir($rep);
  4. while ($f = readdir($dir)){
  5. if(is_file($rep.$f)){
  6.                 list($file,$ext) = explode('.',$f);
  7.                 if(is_numeric($file)&&$ext=='jpg') $liste[] = $file;
  8. }
  9. }
  10. $prochain = max($liste)+1;


Ca devrait marcher. Je suppose...
En supposant que tes noms de fichiers ne contiennent pas de point.

Message cité 2 fois
Message édité par dwogsi le 06-05-2007 à 14:00:11

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1555995
pimsa
Posté le 06-05-2007 à 14:02:00  profilanswer
 

dwogsi a écrit :

Code :
  1. $rep = "NOTRE/REPERTOIRE/";
  2. $liste = array();
  3. $dir = opendir($rep);
  4. while ($f = readdir($dir)){
  5. if(is_file($rep.$f)){
  6.                 list($file,$ext) = explode('.',$f);
  7.                 if(is_numeric($file)&&$ext=='jpg') $liste[] = $file;
  8. }
  9. }
  10. $prochain = max($liste)+1;


Ca devrait marcher. Je suppose...
En supposant que tes noms de fichiers ne contiennent pas de point.


 
yep. merci dwogsi, merci naeh, merci c0wb0y  :jap:

n°1556068
NewsletTux
<Insérez ici votre vie />
Posté le 06-05-2007 à 18:41:35  profilanswer
 

dwogsi a écrit :

Code :
  1. $rep = "NOTRE/REPERTOIRE/";
  2. $liste = array();
  3. $dir = opendir($rep);
  4. while ($f = readdir($dir)){
  5. if(is_file($rep.$f)){
  6.                 list($file,$ext) = explode('.',$f);
  7.                 if(is_numeric($file)&&$ext=='jpg') $liste[] = $file;
  8. }
  9. }
  10. $prochain = max($liste)+1;


Ca devrait marcher. Je suppose...
En supposant que tes noms de fichiers ne contiennent pas de point.


 
php.net ne recommande pas ton écriture : http://fr.php.net/manual/fr/function.readdir.php
while ($f = readdir($dir)) à remplacer par while (false !== ($file = readdir($dir)))
je ne sais pas pourquoi, ss doute une Q? de charge du serveur ?

n°1556168
dwogsi
Défaillance cérébrale...
Posté le 06-05-2007 à 20:25:19  profilanswer
 

Citation :

toute entrée dans le nom serait évalué à FALSE causera l'arrêt de la boucle (exemple, un répertoire nommé 0).


Se produit donc dans de rares cas mais peut tout de même se produire. Ceci dit quand on sait quels genre de noms vont prendre les fichiers et répertoire on peut s'affranchir de cette écriture.


Message édité par dwogsi le 06-05-2007 à 20:26:21

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  renommer un fichier uploadé

 

Sujets relatifs
[html] executer ou pas le fichier index.htmConversion durées -> secondes sur un fichier avec sed
Rassembler dans un seul fichier des informations dispersées[Résolu] Lien sur page HTML qui lance un fichier EXE ?
Fichier .genRemplacement/suppression d'un chaine de caractère dans un fichier
parcours d un fichier xml non logique avec javascriptCréer un fichier de resources pour gcc
comment renommer un fichier uploadé sans perdre son extension? 
Plus de sujets relatifs à : renommer un fichier uploadé


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR