comment renommer un fichier uploadé sans perdre son extension?

comment renommer un fichier uploadé sans perdre son extension? - PHP - Programmation

Marsh Posté le 15-01-2004 à 22:21:57    

bonjour,
 
je veux permettre a des utilisateurs d'uploader des fichiers :
 
- les noms de ces fichiers etant entres dans une base de donnee en meme temps que l'upload
- ils doivent garder leurs extensions, pour pouvoir etre affiches sur une page web qui les extrait ensuite de la base.
 
Pas de pb pour la fonction d'upload elle meme en PHP, pas non plus pour l'entrer dans la base.
 
Mais j'ai des utilisateurs qui envoient des fichiers avec des caracteres non ascii => pas d'affichage possible ensuite...
 
Comment est ce que je peux renommer mes fichiers pour supprimer les caracteres non ascii ? Je precise que le nom inséré dans la base doit etre le meme que celui du fichier "physique" pour que je puisse l'effacer dynamiquement par la suite ...
 
 
pour info voila mon code d'upload :
 

Citation :


$uploaddir = '../image/';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . $_FILES['userfile']['name']))  
 {
  $nom_image=$_FILES['userfile']['name'];  
  $requete="INSERT INTO matable (image) VALUES ('$nom_image')";
 
 ...etc }


 
 
Si quelqu'un a une astuce ?
 
Merci :)


Message édité par jerkeve le 15-01-2004 à 22:26:27
Reply

Marsh Posté le 15-01-2004 à 22:21:57   

Reply

Marsh Posté le 16-01-2004 à 00:38:04    

C'est quoi ces caractères non ascii :??:  
Tu devrais avoir le nom du fichier à l'origine [:spamafote]

Reply

Marsh Posté le 16-01-2004 à 10:18:31    

je veux que les utilisateurs n'envoient pas des fichiers dont les noms comportant d'autres caracteres que "a-z", "1-9", "-" et "_"
C'est tout... sinon, le fichier uploade ne s'affiche pas !
 
j'en ai qui m'envoient des apostrophes, des accents, des cedilles, et j'en passe  :sarcastic:


Message édité par jerkeve le 16-01-2004 à 10:19:32
Reply

Marsh Posté le 16-01-2004 à 10:56:11    

Personnellement j'utilise ça :

Code :
  1. $image_name=preg_replace("([^\d\w\.])","_",$_FILES['f_img']['name']);
  2.  if (move_uploaded_file($_FILES['f_img']['tmp_name'], $uploaddir .$image_name)){
  3. ...ect }


Message édité par Azzazel le 16-01-2004 à 10:56:57
Reply

Marsh Posté le 16-01-2004 à 11:33:05    

oui, c'est pas mal; la tu changes le nom que tu entres dans la base ... mais pas celui du fichier qui est uploade sur le serveur  
 
=> quand tu veux l'effacer, la base ne le reconnait plus [:spamafote]
 
Comment est ce que je peux renommer le fichier uploadé avec le meme nom (modifié) que celui qui va etre entre dans la base ???


Message édité par jerkeve le 16-01-2004 à 11:34:06
Reply

Marsh Posté le 16-01-2004 à 12:44:03    

???
La fonction move_uploaded_file déplace le fichier temporaire uploadé vers le répertoire de ton choix avec le nom de ton choix (ici $image_name)
Sur le serveur dans ton répertoire d'upload il n'y aura que des fichiers que tu aura toi même nommés. Ile ne faut pas confondre le fichier temporaire avec celui qui est stocké sur le serveur. Le fichier temporaire à de toute façon un nom completement différent de l'original.

Reply

Marsh Posté le 16-01-2004 à 14:02:44    

ok, je pige mieux; merci :)
 
une derniere question a laquelle je ne trouve pas de reponse :  
 
dans ta fonction preg_replace("([^\d\w\.])"... , que signifie "\d\w." ?? Est-ce que TOUS les caracteres speciaux possibles (apostrophes, accentues, cedilles... etc) seront bien renommes ?

Reply

Marsh Posté le 16-01-2004 à 14:35:02    

La traduction c'est :
[^ :: c'est la négation de l'ensemble qui suis
\d : chiffre
\w : caractère de l'alphabet
\. : point =)
 
Donc tout ce qui n'est pas tout ça je le remplace par "_"
 
C'est simple mais ça fonctionne bien donc j'ai pas eu envie de chercher plus compliqué.

Reply

Marsh Posté le 16-01-2004 à 14:47:43    

génial ! merci Azzarel, c'est exactement ce que je cherchais  :love: , tu es un tout bon !


Message édité par jerkeve le 16-01-2004 à 14:48:52
Reply

Marsh Posté le 16-01-2004 à 17:02:15    

juste un add-on... si tu veux egalement supprimer les caracteres accentues (qui restent avec ton code), j'ajoute un  
$image_name=strt($image_name, "äâàéèëêïîöôùûüÿç", "aaaeeeeiioouuuyc" );
 
avant ton preg_replace
 
il y a peut etre plus elegant ? mais ca marche ...

Reply

Sujets relatifs:

Leave a Replay

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