Upload de fichiers ... rajouter des caractères ...??

ThunderDog Messages postés 13 Date d'inscription vendredi 23 novembre 2007 Statut Membre Dernière intervention 1 février 2008 - 24 nov. 2007 à 13:32
yoman64 Messages postés 962 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 2 août 2010 - 1 déc. 2007 à 00:17
Bonjour ......

Avant tout, je tiens à féliciter tous ceux/celles qui contribuent ou ont contribué au contenu de ce site ..
C'est une mine d'or pour le débutant que je suis ^^

Maintenant

J'ai créé un upload de fichier sur mon site perso de Free ... après quelques heures, j'ai trouvé (tout seul chouette ^^) les solutions aux erreurs que me renvoyait le script , et mon upload fonctionne maintenant à merveille xD
(par contre j'utilise quand même le $_FILE .. malgré les posts expliquant la faille .. je ne sais pas faire autrement)

Mon upload vérifie la présence du fichier en tmp ... vérifie que la taille du fichier ne dépasse pas la limite .... vérirfie l'extension du fichier .... et pose aussi le fichier dans un répertoire externe pour back-up ....

Mais j'aimerais rajouter deux choses :

- le remplacement d'un caractère spécial ou d'un espace pour éviter un bug dans le lien final du fichier ....
- l'ajout de caractères à la fin du nom original pour ne pas écraser un fichier déjà présent qui porterait le même nom ....

Et la je plante à fond ..... Je n'arrive pas à trouver mon bonheur dans les scripts déjà présents sur le site ...

Pourriez-vous m'aider svp ????

Merci d'avance ...

Bonne après-midi ...

*ThunderDog*

10 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
24 nov. 2007 à 13:55
Hello,

le nom du fichier original se trouve dans $_FILES['mon_nom_de_champ_upload']['name'].
NBref, un str_replace, une concaténation, puis tu fais ton move_uploaded_file() avec le nom nouvellement créé.
Et merci pour les contributeurs :-)
0
ThunderDog Messages postés 13 Date d'inscription vendredi 23 novembre 2007 Statut Membre Dernière intervention 1 février 2008
24 nov. 2007 à 14:16
"NBref, un str_replace, une concaténation,"   ........

HUUUMMMMM

et en langage GROS DEBUTANT , ça donne quoi ??? ptdrrrrrrrr

tu n'aurais pas un bout de script sous la main ????

car je n'ai jamais pris aucun cours ni lu aucun livre .... donc je ne connais ni le langage technique, ni 90% des variable :p .... lol

Merci ^^ ...
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
24 nov. 2007 à 15:20
Salut,

Plutôt qu'un str_replace, qui oblige à déterminer quels sont les caractères dont on ne veut pas, il serait, à mon sens, plus pertinent d'utiliser preg_replace en sachant quels caractères on veut garder.

preg_replace('`([^a-zA-Z0-9\._-])`', '_', $fichier)

Pour avoir un nom unique, il suffit de lui rajouter une chaine de caractères qu'on sait être unique
Par exemple :
$fichier .= '_' . uniqid();
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
24 nov. 2007 à 16:01
@neige => pourquoi preg_replace ? str_replace est bien plus rapide et suffit amplement à la tâche pour un simple remplacement de caractères indésirables. Il n'y en a pas énormément...ca ne justifie pas l'artillerie lourde.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
24 nov. 2007 à 16:16
@malalam : en fait, j'ai réfléchi de travers (c'est l'week end... hum)
Le nom du fichier lors de l'upload, il est fixé par le nom du fichier sur le dd de l'uploader... Donc les caractères indésirables, il n'y en a effectivement moins que si on peut saisir le nom du fichier à la main...
J'ai mélangé deux neuronnes, c'est tout. Mais ça va mieux.
0
ThunderDog Messages postés 13 Date d'inscription vendredi 23 novembre 2007 Statut Membre Dernière intervention 1 février 2008
27 nov. 2007 à 10:59
Bonjour ...

Merci pour vos réponses, mais je ne parviens toujours pas à mes fins ...

j'ai ce code :

// tous les tests sont vérifiés

$name_file = $_FILES['fichier']['name'];
$name_file = strtr($name_file,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$name_file = preg_replace('/([^.a-z0-9]+)/i', '-', $name_file);

// on copie le fichier dans le dossier de destination

if( !copy($tmp_file, $content_dir . $name_file) )


Ca m'upload le fichier sans soucis, et les caractères spéciaux et accents sont modifiés ... de ce coté la, du coup, c'est tout bon ... MERCI ./.

Mais comment rajouter des caractères aléatoires ??

J'ai testé le uniqid () mais il me renvoie :

Warning: uniqid() expects at least 1 parameter, 0 given in **********************.php on line 94

Quels sont ces paramètres, svp ?? :-D

@ + tard ..
Bonne journée ..
0
ThunderDog Messages postés 13 Date d'inscription vendredi 23 novembre 2007 Statut Membre Dernière intervention 1 février 2008
27 nov. 2007 à 11:28
Bon, en fait j'y suis arrivé ...

$name_file = $_FILES['fichier']['name'];
$name_file = strtr($name_file,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$name_file = preg_replace('/([^.a-z0-9]+)/i', '-', $name_file);

// on ajoute le préfixe

$name_final = time()."_".$name_file;

// on copie le fichier renommé dans le dossier de destination

if( !copy($tmp_file, $content_dir . $name_final) )

-----------------------------------------------


Mais maintenant, je vais partir sur une toute autre question :

coté sécurité, comment vérifier (j'ai lu qqpart une histoire de type mime) que le fichier uploadé est bien du type de l'extension qu'il porte ..??..

Merci ...

@ +++
0
yoman64 Messages postés 962 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 2 août 2010 2
30 nov. 2007 à 05:32
Salut déja utilise move_upload_file au lieu de copy !

ensuite pour vérifié si le fichier est bien de l'extension qu'il porte, eh bien utilise mime magic. Tu peux créé un script toi meme qui vérifie les quelques premier octets du fichier en question, mais sinon il y certaines fonctions php qui peuvent t'aider...

http://ca.php.net/manual/fr/function.finfo-open.php

http://ca.php.net/manual/fr/ref.fileinfo.php

Mais en plus simple, suffit de vérifié la variable $_FILES['fichier']['type']

-------------------
Vous cherchez un hebergement Php/MySQL Gratuit et sans publicités ??
Et bien c'est la : www.e3b.org  
0
ThunderDog Messages postés 13 Date d'inscription vendredi 23 novembre 2007 Statut Membre Dernière intervention 1 février 2008
30 nov. 2007 à 12:23
'Lut ^^ ...

ben je suis chez free .... et il ne reconnait pas le !move_upload_file :s ... c'est pour ça que j'ai mis !copy .....

Pour ce qui est de la var $_FILES, c'est déjà ca que j'utilise ...

$type_file = $_FILES['fichier']['type'];
if( !strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'bmp') && !strstr($type_file, 'gif') && !strstr($type_file, 'png') && !strstr($type_file, 'rar') && ETC ..... )

mais j'ai lu qu'il existe une faille avec cette variable .....

je ne voudrais pas qu'on m'upload php sous l'extension png par exemple .... merci les dégats xD

Je regarderais donc ce que tu m'as filé .. merci ;) ...

ah oui, pendant qu'on est dans les types de fichiers et leur vérifications :

J'autorise l'upload de .fla .... je l'ai rentré dans la liste comme les autres, mais quand j'en envoie un, il me répond que ce n'est pas une extension valide ... alors qu'il l'upload quand même sur le serveur ...???...???...

as-tu une idée sur d'où ça peut venir ???

merci ...

@ ++++
0
yoman64 Messages postés 962 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 2 août 2010 2
1 déc. 2007 à 00:17
Inquiête toi pas, les fichiers php sont pas détecter par MIME sur le serveur, mais bien par extension... si le fichier s'appele pas .php il ne sera pas executé , meme si tu renomme un script php en .jpg il sera pas executé , donc de ce coté tu t'inquiete pour rien

-------------------
Vous cherchez un hebergement Php/MySQL Gratuit et sans publicités ??
Et bien c'est la : www.e3b.org  
0
Rejoignez-nous