begin process at 2012 05 27 20:55:54
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > WD_UPLOAD V2

WD_UPLOAD V2


 Information sur la source

Note :
8,75 / 10 - par 4 personnes
8,75 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Divers Niveau :Initié Date de création :19/12/2004 Date de mise à jour :20/12/2004 12:27:26 Vu :4 343

Auteur : webdeb

Ecrire un message privé
Site perso
Commentaire sur cette source (17)
Ajouter un commentaire et/ou une note

 Description

Ce petit script vous permet d'uploader des fichiers images (ou autres en adaptant le script) dans un répertoire de votre serveur FTP. Les extensions autorisées sont définies dans un tableau associatif $extensions_ok en tête de script. Il est possible de configurer, via les premières variables : les extensions autorisées, le répertoire cible (à créer manuellement sur le serveur distant via client FTP), la largeur max, la hauteur max et la taille maximale des images. Le script se charge de vérifier si ces paramètres sont corrects avant l'upload final grâce à move_uploaded_file() par le protocole HTTP.

Source

  • <?php
  • //------------------------------------------
  • // Script réalisé par Webdeb73
  • // Le 19/12/2004
  • // Licence GNU / GPL
  • // webmaster@webmaster-debutant.net
  • // http://www.webmaster-debutant.net
  • //------------------------------------------
  • //--------------------------------------
  • // DEFINITION DES VARIABLES
  • //--------------------------------------
  • $target = "files/"; // Repertoire cible
  • $max_size = 100000; // Taille max en octets du fichier
  • $width_max = 100; // Largeur max de l'image en pixels
  • $height_max = 100; // Hauteur max de l'image en pixels
  • $extensions_ok = array(".jpg",".gif",".png",".jpeg");
  • //------------------------------------------------------------
  • // DEFINITION DES VARIABLES LIEES AU FICHIER
  • //------------------------------------------------------------
  • $nom_file = $_FILES['fichier']['name'];
  • $taille = $_FILES['fichier']['size'];
  • $tmp = $_FILES['fichier']['tmp_name'];
  • $chemin = $target.$_FILES['fichier']['name'];
  • $extension = substr(strrchr($nom_file, "."), 0); // Récupération de l'extension
  • //---------------------------
  • // SCRIPT D'UPLOAD
  • //---------------------------
  • if($_POST['posted'])
  • {
  • // On vérifie si le champ est rempli
  • if($_FILES['fichier']['name'])
  • {
  • // On vérifie l'extension du fichier
  • if(in_array(strtolower($extension),$extensions_ok))
  • {
  • // On récupère les dimensions du fichier
  • $infos_img = getimagesize($_FILES['fichier']['tmp_name']);
  • // On vérifie les dimensions et taille de l'image
  • if(($infos_img[0] <= $width_max) && ($infos_img[1] <= $height_max) && ($taille <= $max_size))
  • {
  • // Si c'est OK, on teste l'upload
  • if(move_uploaded_file($tmp,$chemin))
  • {
  • // Si upload OK alors on affiche le message de réussite
  • echo '<p align="center">';
  • echo '<font face="Verdana" size="2" color="#FF0000">';
  • echo '<b>Image uploadée avec succès !</b>';
  • echo '</font>';
  • echo '<hr>';
  • echo '<b>Fichier :</b> '.$_FILES['fichier']['name'].'</br>';
  • echo '<b>Taille :</b> '.$_FILES['fichier']['size'].' Octets</br>';
  • echo '<b>Largeur :</b> '.$infos_img[0].' px</br>';
  • echo '<b>Hauteur :</b> '.$infos_img[1].' px</br>';
  • echo '<hr>';
  • echo '<br><br>';
  • }
  • else
  • {
  • // Sinon on affiche une erreur système
  • echo '<p align="center">';
  • echo '<font face="Verdana" size="2" color="#FF0000">';
  • echo '<b>Problème lors de l\'upload !</b>';
  • echo '</font><br><br>';
  • }
  • }
  • else
  • {
  • // Sinon erreur sur les dimensions et taille de l'image
  • echo '<p align="center">';
  • echo '<font face="Verdana" size="2" color="#FF0000">';
  • echo '<b>Erreur dans les dimensions ou taille de l\'image !</b>';
  • echo '</font><br><br>';
  • }
  • }
  • else
  • {
  • // Sinon on affiche une erreur pour l'extension
  • echo '<p align="center">';
  • echo '<font face="Verdana" size="2" color="#FF0000">';
  • echo '<b>Votre image ne comporte pas une extension valide !</b>';
  • echo '</font><br><br>';
  • }
  • }
  • else
  • {
  • // Sinon on affiche une erreur pour le champ vide
  • echo '<p align="center">';
  • echo '<font face="Verdana" size="2" color="#FF0000">';
  • echo '<b>Le champ du formulaire est vide !</b>';
  • echo '</font><br><br>';
  • }
  • }
  • ?>
  • <html>
  • <head>
  • <title>Upload d'une image sur le serveur !</title>
  • </head>
  • <body>
  • <form enctype="multipart/form-data" action="<?php echo $PHP_SELF; ?>" method="POST">
  • <font face="Verdana" size="2" color="#000000">
  • <b>Envoyer le fichier :</b>
  • </font>
  • <br><br>
  • <input type="hidden" name="posted" value="1">
  • <input name="fichier" type="file">
  • <input type="submit" value="Uploader">
  • </form>
  • </body>
  • </html>
<?php

//------------------------------------------
// Script réalisé par Webdeb73
// Le 19/12/2004
// Licence GNU / GPL
// webmaster@webmaster-debutant.net
// http://www.webmaster-debutant.net
//------------------------------------------

//--------------------------------------
//  DEFINITION DES VARIABLES
//--------------------------------------

$target     = "files/";  // Repertoire cible
$max_size   = 100000;     // Taille max en octets du fichier
$width_max  = 100;        // Largeur max de l'image en pixels
$height_max = 100;        // Hauteur max de l'image en pixels

$extensions_ok = array(".jpg",".gif",".png",".jpeg");

//------------------------------------------------------------
//  DEFINITION DES VARIABLES LIEES AU FICHIER
//------------------------------------------------------------

$nom_file   = $_FILES['fichier']['name'];
$taille     = $_FILES['fichier']['size'];
$tmp        = $_FILES['fichier']['tmp_name'];
$chemin     = $target.$_FILES['fichier']['name'];

$extension = substr(strrchr($nom_file, "."), 0); // Récupération de l'extension

//---------------------------
//  SCRIPT D'UPLOAD
//---------------------------

if($_POST['posted'])
{

// On vérifie si le champ est rempli

  if($_FILES['fichier']['name'])
  {
     // On vérifie l'extension du fichier

    if(in_array(strtolower($extension),$extensions_ok))
    {
       // On récupère les dimensions du fichier

        $infos_img = getimagesize($_FILES['fichier']['tmp_name']);
            
        // On vérifie les dimensions et taille de l'image

        if(($infos_img[0] <= $width_max) && ($infos_img[1] <= $height_max) && ($taille <= $max_size))
        {
           // Si c'est OK, on teste l'upload

            if(move_uploaded_file($tmp,$chemin))
            {

              // Si upload OK alors on affiche le message de réussite

                echo '<p align="center">';
                echo '<font face="Verdana" size="2" color="#FF0000">';
                echo '<b>Image uploadée avec succès !</b>';
                echo '</font>';
                echo '<hr>';
                echo '<b>Fichier :</b> '.$_FILES['fichier']['name'].'</br>';
                echo '<b>Taille :</b> '.$_FILES['fichier']['size'].' Octets</br>';
                echo '<b>Largeur :</b> '.$infos_img[0].' px</br>';
                echo '<b>Hauteur :</b> '.$infos_img[1].' px</br>';
                echo '<hr>';
                echo '<br><br>';
            }
               else
            {

               // Sinon on affiche une erreur système

                echo '<p align="center">';
                echo '<font face="Verdana" size="2" color="#FF0000">';
                echo '<b>Problème lors de l\'upload !</b>';
                echo '</font><br><br>';
            }
        }
          else
        {

          // Sinon erreur sur les dimensions et taille de l'image

            echo '<p align="center">';
            echo '<font face="Verdana" size="2" color="#FF0000">';
            echo '<b>Erreur dans les dimensions ou taille de l\'image !</b>';
            echo '</font><br><br>';
        }
    }
      else
    {

      // Sinon on affiche une erreur pour l'extension

        echo '<p align="center">';
        echo '<font face="Verdana" size="2" color="#FF0000">';
        echo '<b>Votre image ne comporte pas une extension valide !</b>';
        echo '</font><br><br>';
    }
   }
    else
   {

    // Sinon on affiche une erreur pour le champ vide

    echo '<p align="center">';
    echo '<font face="Verdana" size="2" color="#FF0000">';
    echo '<b>Le champ du formulaire est vide !</b>';
    echo '</font><br><br>';
   }
}
?>
<html>
<head>
<title>Upload d'une image sur le serveur !</title>
</head>
<body>
<form enctype="multipart/form-data" action="<?php echo $PHP_SELF; ?>" method="POST">
<font face="Verdana" size="2" color="#000000">
<b>Envoyer le fichier :</b>
</font>
<br><br>
<input type="hidden" name="posted" value="1">
<input name="fichier" type="file">
<input type="submit" value="Uploader">
</form>
</body>
</html>

 Conclusion

Ca y'est le script est modifié pour que toutes les extensions définies dans le tableau associatif soient vérifiées avant un upload. Merci à Juki_webmaster de m'avoir signaler le bug.


 Historique

19 décembre 2004 21:57:08 :
20 décembre 2004 12:24:36 :
20 décembre 2004 12:27:26 :

 Sources du même auteur

Source avec Zip [PHP5][CLASSE] GÉNÉRATION DE FLUX RSS 2.0
GÉNÉRATION RÉCURSIVE D'UNE ARBORESCENCE DE RÉPERTOIRES
Source avec Zip Source avec une capture [POO] PHP5 ATOM GENERATOR V1.0
Source avec Zip WD_RSS_GENERATOR
Source avec Zip Source avec une capture WD_SHOOTBOX_V3

 Sources de la même categorie

Source avec une capture MODULE JOOMLA 1.5 NOW LISTENING par Alcantornet
Source avec Zip Source avec une capture UPLOAD CENTER par basssem81
Source avec Zip COMPTEUR DE CLIQUE PHP AVEC JQUERY par devgoneti
Source avec Zip LIVRE D'OR SIMPLE (POUR DÉBUTANT) par devgoneti
Source avec Zip SCRIPT TRAVAUX POUR VOTRE SITE par FleuryK

Commentaires et avis

Commentaire de Anthomicro le 20/12/2004 10:23:29

Salut ;-)

A part les multiples echo() le code est propre ;-)

Pense à rendre compatible XHTML ton code HTML actuel cependant ;-)

Je te mets 8/10

a ++

Commentaire de webdeb le 20/12/2004 10:38:40

Salut !

Les echo c'est pour les résultats mais après chacun adapte le script à sa façon. C'est vrai que de l'autre côté je ne l'ai pas rendu compatible XHTML. Faudrait que je commence à y penser pour mes prochaines applications.

Merci pour ta note ;)

++

Commentaire de juki_webmaster le 20/12/2004 11:39:56

Salut,
Ton script est assez bien commentais, bonne chose!

Parcontre je trouve ceci trés sal :
$extension  = substr($nom_file,-3); // Récupération de l'extension

Une explode() ferais un meilleur travaille, sourtout que je lit un peu en haut :
$extensions_ok = array("jpg","gif","png","jpeg");
JPEG (4 caractéres).

Si tu met prochainement une explode() il faut encore verifier la chaine, si elle ne comporte par de double extension, exemple : maphoto.jpeg.php , donc prendre le dernier morceau.

Sinon, bonne contribution.

Commentaire de webdeb le 20/12/2004 11:51:53

Ah wai lol je n'avais pas fait gaffe au jpeg.

C'est vrai qu'il faudrait mieux tout prendre de la fin jusqu'au point pour avoir l'extension complète.

Je vais essayer de plancher dessus.

++

Merci ;)

Commentaire de webdeb le 20/12/2004 12:28:15

Voilà la source a été corrigée et le script fonctionne pour toutes les extensions spécifiées dans le tableau $extensions_ok.

++

Commentaire de coucou747 le 23/12/2004 12:55:22 administrateur CS

Salut

je ne connais pas bien GD...
Si le fichier n'est pas une image, mais que l'extention est en .png, il dit quoi ?

ton script laisse-t-il passer le fichier suspect ?

Commentaire de webdeb le 23/12/2004 13:54:06

Oui logiquement il laisse passer. Du moment que l'extension correspond à celles qui se trouvent dans le tableau $extensions_ok. Mais logiquement un .png sera forcément un fichier image même s'il ne contient pas d'image ?

Commentaire de Anthomicro le 23/12/2004 14:00:58

heu non, tu peux très bien renommer un exe en png, le plus sûr est de vérifier le type mime du fichier ;-)

a +

Commentaire de coucou747 le 23/12/2004 14:15:36 administrateur CS

le plus lourd c'est si t'as une page php qui est assez mal faite pour inslure un fichier passé en paramètre...
ensuite tu inclu un .png alros que c'est du php...
imagine les dégats...

Commentaire de webdeb le 23/12/2004 19:55:43

Wé. Personnellement j'ignorais tout ça ! Faudra que je le mette à jour pour vérifier les entêtes MIME.

Commentaire de NeoZer0 le 28/12/2004 14:47:37

le prob avec les mime c'est que ie renvoi pas les même que firefox ou autre browser. ex:
ie renvoi image/pjpeg
autre: image/jpeg

Commentaire de coucou747 le 28/12/2004 14:49:12 administrateur CS

???? TOUT CA DOIT SE VERIFIER COTE SERVEUR

sinon je te plante en telnet...

Commentaire de trackercheese le 10/06/2005 12:50:47

c bien, mais à quel endroit verifie t-on que le fichier exist bien?

Commentaire de Anthomicro le 10/06/2005 14:28:37

utilise la fonction file_exists($_FILES['nom_du_champ_file']['tmp_name']);

Commentaire de toi1392 le 18/08/2005 12:06:48

J'ai juste une question : coucou747 parle de faille de securité, et moi j'aime pas les failles de securité :non:

Si je remplace la ligne qui vérifie les extensions par celle ci (qui véririfie le type mime (si le type change suivant le serveur, pas grave, il suffit de tester le type mime des types de fichiers que l'on souhaite uploader (echo mime_content_type('1.gif');) et de le copier/coller) :

    //if(in_array(strtolower($extension),$extensions_ok))
    if (mime_content_type($nom_file) == "image/gif" || mime_content_type($nom_file) == "image/jpg" || mime_content_type($nom_file) == "image/png" || mime_content_type($nom_file) == "image/jpeg" )

est ce que cela suffit à securiser le script ou est ce qu'il y a des failles possibles ailleurs ???

pour le test du fichier inexistant (peut etre que ca fonctionne pas sous windows), mais moi sous linux, c'est l'explorateur qui rale et qui ne veut pas que je choisse un fichier qui n'existe pas ;)

Commentaire de toi1392 le 18/08/2005 12:09:45

aie, je viens de voir que le probleme des types mime venait (encore !) de IE :'(
dans ce cas, est ce qu'on ne peut pas tester les 6 1ers caracteres et demander à ce que ca soit une image ?

sinon, y'a toujours la methode bourrin on teste sous ie aussi, et on ajoute à la liste les types mime ie ;)

Commentaire de toi1392 le 18/08/2005 13:37:16

sinon, j'ai une autre idée farfelue :

on met dans le meme repertoire un exemple de chaque fichier autorisés et le code suivant : (ca peut etre automatisé en plus par une lecture dans le repertoire tres facilement)

$mime_ok[] = mime_content_type("1.jpg");
$mime_ok[] = mime_content_type("1.jpeg");
$mime_ok[] = mime_content_type("1.gif");
$mime_ok[] = mime_content_type("1.png");

et donc au moment du test, peut importe le navigateur, le mime sera forcement evalué par la meme fonction que lors de l'instanciation ;)

le test deviendrait :
if(in_array(mime_content_type($nom_file),$mime_ok))

qu'est ce que vous en pensez ????

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,874 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales