upload un fichier et choisirs le nom qu'il aura sur le serveur !

upload un fichier et choisirs le nom qu'il aura sur le serveur ! - PHP - Programmation

Marsh Posté le 12-11-2006 à 14:34:18    

Bonjour à tous !
 
J'ai fait mon code php pour upload un fichier sur mon site web jusqu'a mon serveur !
Et maintenant je voudrais imposer le nom du fichier quand il arrive sur le serveur !
 
Exemple :  
 
Une personne envoi une photo nommé APN022.jpg (sur son PC) et je voudrai que quand il l'envoi elle est un nom précis !
 
 Comment faire ?
 
 
Voici mon code :  

Code :
  1. <html>
  2. <head><title>Envoi de fichier</title></head>
  3. <body>
  4. <?php
  5. if (!isset($_POST['MAX_FILE_SIZE'])) { /* si le formulaire a été validé */
  6. ?>
  7. <form enctype="multipart/form-data" action="" method="post">
  8.   <input type="hidden" name="MAX_FILE_SIZE" value="2000000" />
  9.   Envoyez ce fichier : <input name="userfile" type="file" />
  10.   <input type="submit" value="Envoyer le fichier" />
  11. </form>
  12. <?php
  13. } else {
  14. // mettre en commentaire la ligne inutile (la premiere est pour moi, en local)
  15. // $uploaddir = $_SERVER['DOCUMENT_ROOT'] . '/allsnow/uploads/';
  16. $uploaddir = '/mnt/111/sdc/8/4/allsnow/div/';
  17. // créée le dossier de destination s'il est inexistant
  18. if (!(@opendir($uploaddir))) mkdir($uploaddir);
  19. $uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
  20. if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
  21.  echo "Le fichier est valide, et a été téléchargé avec succès.\n";
  22. } else {
  23.  echo "Une erreur est survenue durant l'envoi du fichier : Le fichier doit être plus petit que 2 Mo sinon sa ne marche pas !<br />\n";
  24. }
  25. }
  26. ?>
  27. </body>


 
Merci a vous !


Message édité par allsnow le 12-11-2006 à 14:35:06
Reply

Marsh Posté le 12-11-2006 à 14:34:18   

Reply

Marsh Posté le 12-11-2006 à 14:39:06    

où est le problème?
http://fr2.php.net/move_uploaded_file


Message édité par nargy le 12-11-2006 à 14:41:18
Reply

Marsh Posté le 12-11-2006 à 14:41:29    

"move_uploaded_file", c'est pour le deplacer ! Moi je voudrai lui atribuer un nom par défaut !

Reply

Marsh Posté le 12-11-2006 à 14:44:20    

ben.. en le déplaçant tu lui donne aussi un nom....

Code :
  1. function get_unique_file_name($path)
  2. {
  3.   while(file_exists($path))
  4.   {
  5.    $parts=explode(".",$path);
  6.    if (count($parts)<=1)
  7.    {
  8.      $path=$path.".001";
  9.    }
  10.    else
  11.    {
  12.      $num=$parts[count($parts)-2];
  13.      if (!ereg("^[0-9]+\$",$num))
  14.      {
  15.        $parts2=array();
  16.        for($i=0;$i<count($parts)-1;$i++)
  17.        {
  18.          $parts2[]=$parts[$i];
  19.        }
  20.        $parts2[]="001";
  21.        $parts2[]=$parts[count($parts)-1];
  22.        $path=implode(".",$parts2);
  23.      }
  24.      else
  25.      {
  26.        $parts2=array();
  27.        for($i=0;$i<count($parts)-2;$i++)
  28.        {
  29.          $parts2[]=$parts[$i];
  30.        }
  31.        $parts2[]=sprintf("%03d",($num+1));
  32.        $parts2[]=$parts[count($parts)-1];
  33.        $path=implode(".",$parts2);
  34.      }
  35.    }
  36. }
  37. return $path;
  38. }
  39. $uploadfile=get_unique_file_name($uploaddir.$HTTP_POST_FILES['userfile']['na
  40. me']);

Reply

Marsh Posté le 12-11-2006 à 14:56:46    

Dsl mais je debut !  
 
Je l'insere ou le code ?
 
Merci  

Reply

Marsh Posté le 12-11-2006 à 20:24:15    

De la ligne 1 à 38, la fonction get_unique_file_name($path) doit être définie au début du script, elle prends en argument un nom de fichier, et si il existe déjà renvoie le nom de fichier numéroté, sinon elle renvoie le nom donné en paramètre.
Par exemple:
test.jpg -> test.jpg
test.jpg -> test.001.jpg
test.jpg -> test.002.jpg
 
Les lignes 40/41 utilisent un répertoire $uploaddir dans lequel le serveur apache a les droits décriture, ajoutent le nom du fichier donné par l'utilisateur, et appellent la fonction get_unique_file_name pour obtenir un nom de fichier qui n'existe pas. Reste à appeler move_uploaded_file() de PHP vers $uploadfile pour déplacer vers le répertoire $uploaddir en renommant le fichier uploadé avec un nom de fichier unique.
Si ça ne convient pas, tu peut remanier le code pour seulement numéroter les fichiers.
Note que tu dois avoir les droits en écriture sur le répertoire vers lequel tu stocke les fichiers.

Reply

Marsh Posté le 13-11-2006 à 18:43:02    

Ok, j'ai compris la fonction de chacun !
 
Es que tu peux me montré ou j'insère la fonction get_unique_file_name dans mon code, pour donné un nom précis au fichier uploadé.

Code :
  1. <html>
  2. <head><title>Envoi de fichier</title></head>
  3. <body>
  4. <?php
  5. if (!isset($_POST['MAX_FILE_SIZE'])) { /* si le formulaire a été validé */
  6. ?>
  7. <form enctype="multipart/form-data" action="" method="post">
  8.   <input type="hidden" name="MAX_FILE_SIZE" value="2000000" />
  9.   Envoyez ce fichier : <input name="userfile" type="file" />
  10.   <input type="submit" value="Envoyer le fichier" />
  11. </form>
  12. <?php
  13. } else {
  14. // mettre en commentaire la ligne inutile (la premiere est pour moi, en local)
  15. // $uploaddir = $_SERVER['DOCUMENT_ROOT'] . '/allsnow/uploads/';
  16. $uploaddir = '/mnt/111/sdc/8/4/allsnow/flo/';
  17. // créée le dossier de destination s'il est inexistant
  18. if (!(@opendir($uploaddir))) mkdir($uploaddir);
  19. $uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
  20. if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
  21.  echo "Le fichier est valide, et a été téléchargé avec succès.\n";
  22. } else {
  23.  echo "Une erreur est survenue durant l'envoi du fichier : Le fichier doit être plus petit que 2 Mo sinon sa ne marche pas !<br />\n";
  24. }
  25. }
  26. ?>
  27. </body>


 
Sinon j'ai les droits d'écriture !  
Disons que mon code marche comme il est, mais que je voudrais rajouter une fonction en plus pour que quand un fichier est uploadé il est un noms que je déciderais !
 
 
Merci de ton aide nargy


Message édité par allsnow le 13-11-2006 à 18:46:49
Reply

Marsh Posté le 13-11-2006 à 21:26:07    

Tu dois insérer la fonction au tout début (comme toute fonction, il vaut mieux la déclarer avant toute chose, et entre <?php ?> puisqu'on est en PHP).
La ligne 21 est à remplacer par la ligne 40 du code que j'ai posté.
 
Tu es bien sympathique, mais il ne me semble pas que tu ais vraiment compris ce que tu fais. Je te conseille vivement de lire les premiers chapitres de la documentation PHP sur http://php.net/, celà t'éclairera certainement sur de nombreux points.
Enfin, bonne chance :)

Reply

Marsh Posté le 13-11-2006 à 22:42:50    

Ok, je vais mit mettre un peu plus sérieusement au PHP, je suis motivé quand je vois tout ce qu'on peut faire avec !
 
Mais sinon pour mon code ! Vu qu'il est presque fini, tu peux me dire une fois que j'ai remplacé les deux lignes, ou je mets le nom que je veux qu’il ait une fois uploadé !
 
Merci beaucoup de ton aide !

Reply

Marsh Posté le 13-11-2006 à 23:04:40    

Quoi??? quoi!
Le nom que tu veux... Pouquoi, au fait suis-je le Seul à répondre à.........
 
Mouais, bref....$$$
 
Qu'est-ce-que tu veux? au fait?
 
10 internautes se connectent sur ton site... admettons, ils choisissent tous de te refiler leur photo où on voit clairement leurs dents cariées, les poils sous les bras des nanas, et en plus ils font des grimaces. C rigolo.
 
Manque de bol, ils ont tous appelé leur photo <<photo de moi.jpg>>, sauf une qui a cru bon de faire de l'humour: <<photo de moite.jpg>>.
 
Sur ton site, tu dois enregistrer ces photos. Le problème, c'est que les photos ont tous le même nom, sauf une.
 
Tu désire donc que toutes ces photos aient un nom différent, car ton désir le plus profond est de pouvoir différencier ces photos. Pour pouvoir dire: Oui, Anne a des poils sous les bras, Francis a les dents cariées, et ma mère a des gros lolos.
 
Bref, deux solutions:

  • Primo, tu garde le nom originel de la photo, MAIS si deux photos on le même nom, tu les numérote (<<photo de moi.jpg>>, <<photo de moi.001.jpg>>, <<photo de moite.jpg>> )
  • Secundo, tu te fiche du nom originel de la photo, et tu les numérote: <<001.jpg>>, <<002.jpg>>, <<003.jpg>>
  • Tertio, tu ne comprends quedalle à ce que je raconte, et de toute façon t'en a rien a foutre puisque tu pense que je finirais par te refiler le bon code que tu pourra copié/collé.


Primo: je t'ai filé le code, je peux pas faire mieux, l'atelier copié/collé commence demain à 14h30,
Secundo: démerde toi pour adapter le code que je t'ai filé,
Tertio: ... heu ... t'es pas sur le bon forum!
 
Ma poule viens juste de me glisser à l'oreille:

Code :
  1. code code code codé


PS: marre :O

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed