UPLOAD D'IMAGE !

Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
- - Dernière réponse : cs_smart16
Messages postés
5
Date d'inscription
samedi 20 mars 2010
Statut
Membre
Dernière intervention
27 mars 2010
- 21 mars 2010 à 17:25
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/38983-upload-d-image

Evangun
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5 -
Salut,
tu devrais mieux indenter ton code, du début à la fin.
Sinon pourquoi définir un champ hidden avec le MAXSIZE, vu que tu le définis en dur de toute façon ?
et renommer le fichier par le timestamp, c'est arbitraire et inutile... si tu veux la date, tu prends un timedate et si tu veux un id unique t'en prends un plus court ou tu renommes en image(2).jpg...
Au fait artderue, est-ce que tu as déjà tapé "upload image" dans le moteur de Code Source ? essaie ;)
ps: extension s'écrit avec un s.
cs_wizad
Messages postés
356
Date d'inscription
samedi 30 octobre 2004
Statut
Membre
Dernière intervention
14 avril 2009
-
peu sécuriser tous ça...

essai d'uploader un fichier .php (par exemple) en le renomant avec l'extension .jpg... tu comprendra les dégats. Essai de faire un test avec cette fonction :
if(!@getimagesize($_FILES['fichier']['tmp_name']))
{ echo 'Vous avez tentez d'uploader un fichier qui n'est pas une image.'; }
else
{ echo 'C'est bon!'; }
cs_Anthomicro
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8 -
Salut,

wizad > ce que tu dis ne fonctionnera pas vu qu'il vérifie le type envoyé par le navigateur.

Par contre ce type peut être modifié (cf site de coucou747) bref y'a une solution : getimagesize() pour vérifier que le fichier est bien une image.

a +
cs_wizad
Messages postés
356
Date d'inscription
samedi 30 octobre 2004
Statut
Membre
Dernière intervention
14 avril 2009
-
il me semble que c'est exactement ce que j'ai dit... ou alors suis encore pas bien reveillé.
lefter
Messages postés
63
Date d'inscription
lundi 7 juin 2004
Statut
Membre
Dernière intervention
16 mai 2009
-
if ($_FILES['fichier']['type'] != 'image/png' && $_FILES['fichier']['type'] != 'image/jpeg' && $_FILES['fichier']['type'] != 'image/jpg' && $_FILES['fichier']['type'] != 'image/gif')
{
$erreur = 'Le fichier doit être au format *.jpeg, *.gif ou *.png .';
}
Je pense que légérement plus clair et rapide:

if (!in_array($_FILES['fichier']['type'],array('image/png','image/jpg','image/gif')){ ....

Ainsi que :

if ($_FILES['fichier']['type'] == 'image/jpeg') { $extention = '.jpg'; }
if ($_FILES['fichier']['type'] == 'image/png') { $extention = '.png'; }
if ($_FILES['fichier']['type'] == 'image/gif') { $extention = '.gif'; }

Remplacer par :

$extentsion=substr($_FILES['fichier']['name'],-4);
// A Imbriquer dans le else du dessus :-)


wizad [peu sécuriser tous ça...] > Il est toujours possible de passé en Https (si l'hébergeur le gère) :-) mais je pense qu'il y a pas problème de sécurité ici.

Peut-être pour un évolution future:
- Gestion des photos et de catégorie
- Gestion des volumes par utilisateur
et bien d'autre ...

Voici quelques idées je pense judicieuse pour une évolution de ton code.
cs_wizad
Messages postés
356
Date d'inscription
samedi 30 octobre 2004
Statut
Membre
Dernière intervention
14 avril 2009
-
je parlais peu sécuriser au niveau de la détection du type de fichier (et de la gestion). il est trés facile de faire passer par ce script fichier potentielement dangereux (type code malveillant).
kankrelune
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015
-
Comme l'on dit Wizad et Anthomicro le mime type est transmit par le navigateur et non le serveur il est donc facilement falsifiable... mieux vaut faire comme Wizad à dit dans le cas d'une image ou en fonction de l'extension dans le cas d'upload de fichiers mixtes... l'extension conditionnant la façon dont est éxécuté le fichier pour apache... .. .

Renommer les fichiers en ajoutant au nom un id créé aléatoirement est un plus non néligeable contre des attaques... ça empeche un pseudo pirate de retrouver son fichier une fois qu'il est uploadé... personnellement quand les fichiers uploadés ne sont pas censés être utilisés de suite je les zip comme ça c'est réglé... .. .

@ tchaOo°
bbsebb
Messages postés
2
Date d'inscription
mercredi 22 novembre 2000
Statut
Membre
Dernière intervention
9 octobre 2006
-
Les images en format JPG ne marchent pas avec ie mais avec firefox chez moi. Par contre les autres images aucun problème, c'est vraiment bizzard !!!
ZeGamer
Messages postés
3
Date d'inscription
mardi 12 octobre 2004
Statut
Membre
Dernière intervention
23 octobre 2006
-
hm, est-il possible d'ajouter l'url de l'image uploadée ? j'ai bien essayer mais ca marche pas des masse ^^

Par contre comme BBSEBB certaines images ne passe pas (ce sont pourtant belle est bien des images sans code malveillant)
ZeGamer
Messages postés
3
Date d'inscription
mardi 12 octobre 2004
Statut
Membre
Dernière intervention
23 octobre 2006
-
erf excusez mon dernier commentaire j'ai confondu avec un autre script dans le genre sur une autres fenetre -_-
cs_marial
Messages postés
13
Date d'inscription
jeudi 1 février 2007
Statut
Membre
Dernière intervention
5 juin 2007
-
Salut artderue62,
Mon joli code ne fonctionne pas sur Internet Explorer; comment peut-on le tester et le faire fonctionner sur Internet ???
Merci pour vos réponses et suggestions.
gfpl
Messages postés
172
Date d'inscription
samedi 11 août 2012
Statut
Membre
Dernière intervention
9 avril 2011
-
et heuu pas de verification ???

genre
if( preg_match('#[\x00-\x1F\x7F-\x9F/\\\\]#', $name_file) )
{/////////////////////////////

je susi pas sur que coter securiter ca le fasse :)
White Angels
Messages postés
4
Date d'inscription
lundi 21 août 2006
Statut
Membre
Dernière intervention
19 juin 2007
-
N'utiliser pas ce script, je vient de l'essayer on peut uploader des backdoors en les mettant dans des images ^^
kaizer63
Messages postés
25
Date d'inscription
mercredi 18 février 2004
Statut
Membre
Dernière intervention
22 décembre 2009
-
Personellement je l'ai testé sur mon ftp c'est un DEmo 1G OVH et il me dit que l'image a été uploadé et me done l'url le probleme aucune trace de l'image, et cela avec tous les script d'upload d'image que j' ai testé.
Quelqu'un peu m'aider?
code000
Messages postés
4
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
23 janvier 2008
-
salut à tous
C ma première participation sur le réseau codes_source,
je vous cache pas que je le trouve très sympas ..
à propos du script "Uploader vos images", il marche très bien
sauf coté sécurité qui rest à develepper ...
de meme j'aimerai savoir comment modifier les "extonçions" pour ajouter des icons genre "icone.ico" par exemple.
ps: kelkn a dit que "extençion" c'est avec un "s" bhen tout marchai très bien avant de mettre "s" en place de "t" ou bien je me trompe!!
code000
Messages postés
4
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
23 janvier 2008
-
ZeGamer,
voici une variante qui permet d'afficher l'image une fois uploadée (à mettre à la place de lignes 45.46.47.48.49.50.).

==================================================
// On upload le fichier sur le serveur.
if (move_uploaded_file($_FILES['fichier']['tmp_name'], $repertoire.$nom_fichier))
{
$url = 'http://www.monsite.com/'.$repertoire.''.$nom_fichier.'';
echo '

<center>

Votre image à été uploadée sur le serveur avec succes!

[' . $url . ' '.$nom_fichier.']

[' . $url . ' ' . $url . ']

[' . $url . ' ]

Lien direct:

Lien forum:

[javascript:history.back(1)
Pour uploader une autre image]

Info image:

Nom: '.$nom_fichier.'

Type: '.$_FILES['fichier']['type'].'

Taille (octets): '.$_FILES['fichier']['size'].' octets.

</center>
';
}
==================================================

C U ;)
code000
Messages postés
4
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
23 janvier 2008
-
" ...
de meme j'aimerai savoir comment modifier les "extonçions" pour ajouter des icônes genre "icone.ico" par exemple ?"

Pour uploader des icônes on met "image/x-icon" en place de "image/gif" par ex. anisi après modifications on obtient:

==========================================================
// On vérifit le type du fichier
if (
$_FILES['fichier']['type'] != 'image/png' && $_FILES['fichier']['type'] != 'image/jpeg' && $_FILES['fichier']['type'] != 'image/jpg' && $_FILES['fichier']['type'] != 'image/gif' && $_FILES['fichier']['type'] != 'image/x-icon'
)
{
$erreur = 'Le fichier doit être au format *.jpeg, *.jpg, *.ico, *.gif ou *.png .';
}
==========================================================
et just en bas :
==========================================================
// On définit l'extention du fichier puis on le nomme par le timestamp actuel
if ($_FILES['fichier']['type'] == 'image/jpeg')
{ $extention = '.jpeg'; }
if ($_FILES['fichier']['type'] == 'image/jpeg')
{ $extention = '.jpg'; }
if ($_FILES['fichier']['type'] == 'image/png')
{ $extention = '.png'; }
if ($_FILES['fichier']['type'] == 'image/gif')
{ $extention = '.gif'; }
if ($_FILES['fichier']['type'] == 'image/x-icon')
{ $extention = '.ico'; }$nom_fichier time().$extention;
C U ;)
CODE000.
thoanny
Messages postés
2
Date d'inscription
lundi 5 mars 2007
Statut
Membre
Dernière intervention
7 juillet 2008
-
Comment est-ce que je pourrais avec ce script, limité à une largeur et une hauteur prédéfinie ?

Merci d'avances
cs_djyac
Messages postés
4
Date d'inscription
mercredi 6 février 2008
Statut
Membre
Dernière intervention
7 juin 2008
-
bravo!!! c'est exactement ce que je cherche. bon continuation
coucou747
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30 -
djyac, cette source contient de grosses failles.
Chouchille
Messages postés
1
Date d'inscription
mercredi 20 août 2008
Statut
Membre
Dernière intervention
9 février 2009
-
Pour faire fonctionner le script sous IE, il suffit just de faire un var_dump($_FILES); et de recuperer le type retourne par IE.
Au final il suffit de changer le if de la verification du type de fichier par ca :
if ($_FILES['fichier']['type'] != 'image/png' && $_FILES['fichier']['type'] != 'image/x-png' && $_FILES['fichier']['type'] != 'image/jpeg' && $_FILES['fichier']['type'] != 'image/jpg' && $_FILES['fichier']['type'] != 'image/pjpg' && $_FILES['fichier']['type'] != 'image/pjpeg')

et de rajouter les if correspondant pour l'extension du timestamp

Pour LEFTER :
Ton idee de remplacer ses verifications par " $extentsion=substr($_FILES['fichier']['name'],-4); " est bonne mais ne va pas fonctionner pour les .jpeg
coucou747
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30 -
la verification par extention n'est pas fiable, la preuve en est : elle depend du client.
golant
Messages postés
6
Date d'inscription
mercredi 27 décembre 2006
Statut
Membre
Dernière intervention
28 octobre 2009
-
L'upload de jpeg depuis Internet Explorer ne fonctionne pas... Que faire ?
Côté sécurité, je vais l'utiliser pour un CMS privé donc nikel pour moi !
Sinon, impeccable ! Exactement ce que je cherchais !
Si vous pouviez m'aider pour ce souci de .jepg sous IE ça serait super ! Merci.
++
MarcLaurentHarnist
Messages postés
4
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
20 mars 2010
-
Bravo Artderue62 pour ce code. J'ai parcouru le web toute l'après-midi pour ne trouver que des codes qui ne fonctionnent pas. Le tien fonctionne très bien, trop même ! Mais après avoir appliqué le verrou de sécurité conseillé par Wizard, tout va bien ! Je te donne une très bonne note. Je vais insérer ce code dans mon annuaire sur Creaweb3000.com où mes visiteurs pourront envoyer un logo ou une bannière de leur site.
MarcLaurentHarnist
Messages postés
4
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
20 mars 2010
-
J'ai rajouté un petit code pour empêcher le chargement d'images en format bitmap. (.bmp)
Pour ceux qui voudrait le rajouter.

// On ne veut pas de bmp//
elseif ($_FILES['fichier']['type'] == 'image/bmp')
{
$erreur = 'Le format bitmap (.bmp) n\'est pas accepté. Convertissez-la en jpg, png ou gif avant de l\'envoyer, merci';
}
jakkes
Messages postés
12
Date d'inscription
vendredi 31 octobre 2008
Statut
Membre
Dernière intervention
1 février 2010
-
salut les programmeurs je me demandais qu'est ce qui se passerait si on upload deux images qui ont le même
nom avec ce script?répondez please
MarcLaurentHarnist
Messages postés
4
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
20 mars 2010
-
Bonjour Jakkes,

C'est très simple, la seconde image écrase la première et prend sa place.
C'est pour cela qu'on utilise le timestamp pour être sûr de donner un autre nom.

Mais tu peux créer un fichier php sans timestamp justement, afin d'utiliser l'écrasement pour remplacer une image qui ne te plaît pas.

Ainsi, tu peux te créer toi-même un vrai gestionnaire d'image (ou gestionnaire de médias) avec plusieurs options:
- rajouter une image
- remplacer une image
- afficher les images

Voilà, cordialement, Marc.

PS: n'utilisez pas
pour les retours à la ligne, mais plutôt:
(pour la validation W3C)

[Mon site: http://creaweb3000.com]
cs_smart16
Messages postés
5
Date d'inscription
samedi 20 mars 2010
Statut
Membre
Dernière intervention
27 mars 2010
-
bonjour rour le monde,
est-ce que c'est possible d'uploader plusieurs images en même temps ???
MarcLaurentHarnist
Messages postés
4
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
20 mars 2010
-
Avec ce script ce n'est pas possible, il faudrait le perfectinner.

Il existe un code php pour uploader plusieurs images en même temps. Dotclear le permet dans son gestionnaire de média.
cs_smart16
Messages postés
5
Date d'inscription
samedi 20 mars 2010
Statut
Membre
Dernière intervention
27 mars 2010
-
ok merci