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

  FORUM HardWare.fr
  Programmation
  PHP

  comment renommer un fichier uploadé sans perdre son extension?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

comment renommer un fichier uploadé sans perdre son extension?

n°613020
jerkeve
Posté le 15-01-2004 à 22:21:57  profilanswer
 

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
mood
Publicité
Posté le 15-01-2004 à 22:21:57  profilanswer
 

n°613160
mrbebert
Posté le 16-01-2004 à 00:38:04  profilanswer
 

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

n°613256
jerkeve
Posté le 16-01-2004 à 10:18:31  profilanswer
 

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
n°613296
Azzazel
Posté le 16-01-2004 à 10:56:11  profilanswer
 

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
n°613324
jerkeve
Posté le 16-01-2004 à 11:33:05  profilanswer
 

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
n°613372
Azzazel
Posté le 16-01-2004 à 12:44:03  profilanswer
 

???
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.

n°613481
jerkeve
Posté le 16-01-2004 à 14:02:44  profilanswer
 

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 ?

n°613523
Azzazel
Posté le 16-01-2004 à 14:35:02  profilanswer
 

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é.

n°613533
jerkeve
Posté le 16-01-2004 à 14:47:43  profilanswer
 

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
n°613665
jerkeve
Posté le 16-01-2004 à 17:02:15  profilanswer
 

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 ...


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

  comment renommer un fichier uploadé sans perdre son extension?

 

Sujets relatifs
fichier de données .ttx, comment mettre plusieurs valeurs?redigirer ce qu'on obtient dans un fichier texte
lecture/recherche dans un fichier exeIdentificateur de fichier
[VB] suppression d'un fichier sur DDCree un fichier .BAT avec une condition
Ecrire fichier dans %systemroot%[VB.net] Ouvrir un fichier Excel a un endroit spécifié.
date de derniere mise à jour d'un fichier avec une page .htmlLecture de fichier au format DVD
Plus de sujets relatifs à : comment renommer un fichier uploadé sans perdre son extension?


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