UPLOAD MULTIPLE PHP/JAVASCRIPT EN 36 LIGNES DE CODE

valneandre Messages postés 35 Date d'inscription mardi 7 novembre 2006 Statut Membre Dernière intervention 18 septembre 2009 - 6 nov. 2009 à 14:08
 julien0298 - 15 janv. 2013 à 14:38
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/50811-upload-multiple-php-javascript-en-36-lignes-de-code

Niveau sécurité, c'est pas top!
Mais je trouves que pour un débutant c'est pas mal du tout
Bons courage!
LeFauve42 Messages postés 239 Date d'inscription vendredi 20 octobre 2006 Statut Membre Dernière intervention 20 avril 2009
11 nov. 2009 à 13:08
Les expressions regulieres ne sont pas si compliquees mais si tu t'y lances, je te conseille de miser sur "les expression regulieres compatible PERL" (PCRE) plutot que les expressions regulieres POSIX (c'est celles que j'utilise, mais qui sont plus limitees et plus lentes que les PCRE... donc ne fait pas comme moi :o) ).
valneandre Messages postés 35 Date d'inscription mardi 7 novembre 2006 Statut Membre Dernière intervention 18 septembre 2009
11 nov. 2009 à 11:50
Merci beaucoup, Lefauve42, pour toutes ces précisions, notamment la possibilité de réduire les images avec GDLib, que je vais étudier dès que possible.
En ce qui concerne les expressions régulières, je dois dire que je n'y connais rien, et que j'hésite à m'y lancer, vu le nombre d'autres choses qu'il faut avoir en tête par ailleurs...
Merci en tous cas. C'est encourageant.
Richard
LeFauve42 Messages postés 239 Date d'inscription vendredi 20 octobre 2006 Statut Membre Dernière intervention 20 avril 2009
11 nov. 2009 à 11:20
Salut,

Ce n'est pas si terrible que ce que disent les commentaires, mais vu le nombre de lignes, je pense que tu as du améliorer le source original :o) .

Pour ce qui est de la securite, vu que tu n'acceptes que des images, ce n'est pas si critique que ca.
Le plus sur, selon ce que tu veux faire avec les fichiers uploades, c'est de les mettre dans un repertoire non accessible aux clients web. Si ton hebergeur ne le permet pas, il est toujours possible d'ajouter un .htaccess interdisant cet access pour tout le contenu du repertoire.

Petite remarque: Pour accepter toutes les images, tu peux simplifier ton code avec les expressions regulieres. Ca donne un truc genre :
if(ereg('^image/',$typ))
{
if(move_uploaded_file($_FILES['srcfic']['tmp_name'][$x],"$destin/$nom")) // si tout s'est bien passé
{
echo "Le fichier "" . $_FILES['srcfic']['name'][$x] . "" a été correctement envoyé ";
echo "dans le dossier "$destin/"

";
chmod("$destin/$nom",0644);
}
else // sinon (case restée vide, ou fichier pas passé...)
{
if ($nom=="") $nom = "Fichier_Inconnu";
echo "Désolé, je n'ai pas pu envoyer le fichier "$nom" dans le dossier "$destin/" !

";
}
}
else // par défaut: rejeter les fichiers autres qu'images
{
echo "
Fichier "$nom" d'un type incorrect

";
}

Une autre remarque: Le resultat du mime type des fichiers uploades peut varier avec le navigateur utilise. Ca devrait marcher avec les images, mais j'ei deja eu des problemes par le passe avec par exemple les .gz qui n'ont pas le meme type si envoyes avec firefox ou ie.

Sinon j'ai ecrit un script du meme genre (mais specialise pour les images) et plutot que de rejeter les images trop grosses, j'utilisais GDLib pour reduire leur taille avant de les enregistrer. Ce n'est pas si complique si tu te limites aux images gerees par la GDLib (en gros, si tu ne geres pas les BMP).

Eric
valneandre Messages postés 35 Date d'inscription mardi 7 novembre 2006 Statut Membre Dernière intervention 18 septembre 2009
9 nov. 2009 à 14:05
Merci.
Tiens compte quand même des commentaires de Kohntark et Fadiese, ils ont raison: il faut améliorer ce code au niveau de la sécurité, ne t'en sers pas "tel quel"...
kertimanoff Messages postés 75 Date d'inscription samedi 3 décembre 2005 Statut Membre Dernière intervention 30 juin 2013
9 nov. 2009 à 13:39
autant pour moi, j'ai été victime de mon impatience... ça fonction a merveille, excellent code. merci beaucoup
valneandre Messages postés 35 Date d'inscription mardi 7 novembre 2006 Statut Membre Dernière intervention 18 septembre 2009
9 nov. 2009 à 13:28
Parfois le serveur n'affiche pas immédiatement la mise à jour de son répertoire, il faut changer de session pour vérifier si le fichier est bien arrivé.
Sinon... as-tu modifié quelque chose dans le code ?
Autre piste: qui est ton hébergeur ? As-tu réglé correctement les droits d'écriture dans le dossier "downloads" que tu as créé ? Il faut le mettre au moins en 644, voire 777, pour pouvoir y écrire un nouveau fichier.
kertimanoff Messages postés 75 Date d'inscription samedi 3 décembre 2005 Statut Membre Dernière intervention 30 juin 2013
9 nov. 2009 à 11:39
salut, je suis trés interraissé par l'utilité de ton code, maleureusement il ne fonctionne pas ...
j'ai mi le fichier php puis créé un dossier "downloads" dans www sur mon serveur.
quand j'envoi un fichier sa affiche sur la page web que le fichier a bien été envoyé, cependant aucun fichier n'est ajouté sur le serveur... si j'ai sauté une étape peut-on m'éclairer?
valneandre Messages postés 35 Date d'inscription mardi 7 novembre 2006 Statut Membre Dernière intervention 18 septembre 2009
9 nov. 2009 à 11:30
Merci pour les commentaires constructifs de Kohntark et Fadiese.
Pour les autres, je dirai simplement: la critique est aisée, mais l'art est difficile !
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
9 nov. 2009 à 10:28
Salut,

Commentaires plutôt faciles ? On peut même parler d'idiot voire de crétin dans le cas du "allez, poubelle!"

@valneandre :
C'est vrai que ce genre de code peut servir à un débutant, surtout pour l'emploi du DOM, mais encore faudrait il qu'il n'y ait pas d'erreurs :
- <script language="javascript"> => <script type="text/javascript">
- le code HTML n'est pas valide (majuscules, name sur un div, ...)
- aucune (ou presque) gestion des erreurs
- pas de possibilité de supprimer un champ file
- etc ... etc ...

Comme cela a été dit ton code est très dangereux s'il est utilisé tel quel.

Bref, il ne faut pas rêver, un code d'upload de fichier ne peut pas tenir en 36 lignes sans avoir de lourdes carences.

Cordialement,

Kohntark-
cs_fadiese Messages postés 15 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 9 novembre 2009
9 nov. 2009 à 09:52
Pour un débutant c'est un bon début, simple et bien commenté;
Continues et ne tiens pas compte des commentaires plutôt faciles qu'on peut voir ici.
bj33 Messages postés 145 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 1 mai 2012
9 nov. 2009 à 09:00
mon dieu!! j'm disait aussi.

<< Tu aurais au moins pu penser à vérifier un minimum le fichier envoyé...

faudrait pouvoir, penser;))

allez, poubelle!
destinyfr Messages postés 106 Date d'inscription samedi 19 mai 2007 Statut Membre Dernière intervention 13 avril 2009
7 nov. 2009 à 16:37
faut quand même un minimum de sécurité.. Si il met ça comme ça en ligne, en 2mn il à plus de site xD
Tu aurais au moins pu penser à vérifier un minimum le fichier envoyé...
valneandre Messages postés 35 Date d'inscription mardi 7 novembre 2006 Statut Membre Dernière intervention 18 septembre 2009
7 nov. 2009 à 15:43
Je pense que quelqu'un qui débute, et cherche à comprendre, peut tirer profit de ce genre de "fil d'ariane", tout comme j'ai tiré profit, moi-même, de bouts de code simples et sans prétention du même genre. On ne devient pas expert d'un coup !
Richard
destinyfr Messages postés 106 Date d'inscription samedi 19 mai 2007 Statut Membre Dernière intervention 13 avril 2009
7 nov. 2009 à 10:29
Salut,

Dans ce cas la, à quoi sert ce code ?

Merci
valneandre Messages postés 35 Date d'inscription mardi 7 novembre 2006 Statut Membre Dernière intervention 18 septembre 2009
6 nov. 2009 à 14:08
J'ajoute, avant que d'autres me le disent: il n'y a aucun traitement de "fichier déjà présent", de type ni de taille de fichier, et le dossier destinataire est "câblé" dans le code. Tout cela peut être largement amélioré, bien entendu.
Rejoignez-nous