Upload images securise

Soyez le premier à donner votre avis sur cette source.

Snippet vu 14 680 fois - Téléchargée 27 fois

Contenu du snippet

Ce script vous permet d'uploader des images sur votre serveur via le protocole HTTP.
Les extensions autorisées sont à préciser dans un tableau associatif et les caractéristiques maximales de l'image (dimensions hauteur / largeur), répertoire de destination et poids maximal autorisé sont définies grâce à des constantes en entête du script.

Ce script respecte aussi les normes du W3C.

Source / Exemple :


<?php

/************************************************************
	Script realise par Webdeb73
	Le 19/12/2004
	Maj : 27/02/2007
	Licence GNU / GPL
	webmaster@apprendre-php.com
	http://www.apprendre-php.com
	http://www.webmaster-debutant.net
	http://www.hugohamon.com

                                                                                                                          • /
/************************************************************ Definition des constantes / tableaux et variables
                                                                                                                          • /
// Constantes define('TARGET', 'files/'); // Repertoire cible define('MAX_SIZE', 100000); // Taille max en octets du fichier define('WIDTH_MAX', 800); // Largeur max de l'image en pixels define('HEIGHT_MAX', 800); // Hauteur max de l'image en pixels // Tableaux de donnees $tabExt = array('jpg','gif','png','jpeg'); // Extensions autorisees $infosImg = array(); // Variables $extension = null; $message = null; /************************************************************ Creation du repertoire cible si inexistant
                                                                                                                          • /
if( !is_dir(TARGET) ) { if( !mkdir(TARGET, 0700) ) { exit('Erreur : le répertoire cible ne peut-être créé ! Vérifiez que vous diposiez des droits suffisants pour le faire ou créez le manuellement !'); } } /************************************************************ Script d'upload
                                                                                                                          • /
if($_POST) { // On verifie si le champ est rempli if( !empty($_FILES['fichier']['name']) ) { // Recuperation de l'extension du fichier $extension = pathinfo($_FILES['fichier']['name'], PATHINFO_EXTENSION); // On verifie l'extension du fichier if(in_array(strtolower($extension),$tabExt)) { // On recupere les dimensions du fichier $infosImg = getimagesize($_FILES['fichier']['tmp_name']); // On verifie le type de l'image if($infosImg[2] >= 1 && $infosImg[2] <= 14) { // On verifie les dimensions et taille de l'image if(($infosImg[0] <= WIDTH_MAX) && ($infosImg[1] <= HEIGHT_MAX) && (filesize($_FILES['fichier']['tmp_name']) <= MAX_SIZE)) { // Si c'est OK, on teste l'upload if(move_uploaded_file($_FILES['fichier']['tmp_name'], TARGET.$_FILES['fichier']['name'])) { // Message de reussite $message = 'Upload réussi !'; } else { // Sinon on affiche une erreur systeme $message = 'Problème lors de l\'upload !'; } } else { // Sinon erreur sur les dimensions et taille de l'image $message = 'Erreur dans les dimensions de l\'image !'; } } else { // Sinon erreur sur les dimensions et taille de l'image $message = 'Le fichier à uploader n\'est pas une image !'; } } else { // Sinon on affiche une erreur pour l'extension $message = 'L\'extension du fichier est incorrecte !'; } } else { // Sinon on affiche une erreur pour le champ vide $message = 'Veuillez remplir le formulaire svp !'; } } /************************************************************ Formulaire XHTML
                                                                                                                          • /
?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" > <head> <title>Upload d'une image sur le serveur !</title> </head> <body> <?php if( !empty($message) ) { echo '<p>',"\n"; echo "\t\t<strong>", htmlspecialchars($message) ,"</strong>\n"; echo "\t</p>\n\n"; } ?> <!-- Debut du formulaire --> <form enctype="multipart/form-data" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post"> <fieldset> <legend>Formulaire</legend> <p> <label for="fichier_a_uploader" title="Recherchez le fichier à uploader !">Envoyer le fichier :</label> <input type="hidden" name="posted" value="1" /> <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo MAX_SIZE; ?>" /> <input name="fichier" type="file" id="fichier_a_uploader" /> <input type="submit" name="submit" value="Uploader" /> </p> </fieldset> </form> <!-- Fin du formulaire --> </body> </html>

A voir également

Ajouter un commentaire

Commentaires

coucou747
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
26 -
# // On verifie le type de l'image
# if($infos[2] >= 1 && $infos[2] <= 14)
=> Bon point : tu es l'un des seul sur ce site à ne pas avoir utilise $_FILES['..']['type'] qui est une faille...

sinon, remplace tes multiples echo par un seul, et tes " du début par des '...
cs_johann1
Messages postés
172
Date d'inscription
jeudi 21 octobre 2004
Statut
Membre
Dernière intervention
9 janvier 2008
-
J'en avais juste besoin! Grand merci Webded!
Bonne continuation!
webdeb
Messages postés
509
Date d'inscription
samedi 5 avril 2003
Statut
Membre
Dernière intervention
31 mars 2009
2 -
Merci pour vos commentaires ;)

Pourquoi utiliser un seul echo plutôt que plusieurs ? C'est pour la rapidité du script ?

++
coucou747
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
26 -
rapiditée, beautée du code, lisibilitée [...]
malik7934
Messages postés
1162
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
-
Là où coucou te félicite, moi je pige pas... :
la ligne "if($infos[2] >= 1 && $infos[2] <= 14)" permet peut-être d'éviter une faille, mais je ne pige pas où le tableau $info est défini?? Nulle part! Ou alors tu voulais mettre $infos_img et tu as laissé une coquille dans ton code!

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.