IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Upload] Traitement des données du formulaire upload


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 13
    Par défaut [Upload] Traitement des données du formulaire upload
    Bonjour,

    J’ai un petit problème avec la fonction upload.

    Ca coince au niveau de l’extension fichier qui me reviens systématiqement pas correcte, je comprend pas.

    Qui peut m’aider ?

    Merci, voici ce que j’ai fait.

    Formulaire d’upload:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <form enctype = "multipart/form-data" action = "upload.php" method = "post" id = "formulimage" name = "formulimage">
    Mon image <input type = "file" name = "monimage" id = "monimage" />
    ...
    Reception des données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php
    include("redimension.php");
     
    $fichier = upload("http//www.monsite.com/images/", "7000000000000", "monimage");
    fichier fonction upload:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    <?php
     
    	function upload($dossierStock, $taille, $inputName) {
    		global $erreur;
    		$champFile        = $inputName;
    		$dossier          = $dossierStock; 
    		$taille_maxi      = $taille; 
    		$extensions       = array('.png', '.gif', '.jpg', '.jpeg', '.JPG', '.JPEG', '.PNG', '.BMP', '.bmp', '.GIF'); 
     
    		if (isset($_FILES[$champFile])){
    			$fichier = basename($_FILES[$champFile]['name']);
    			$taille = filesize($_FILES[$champFile]['tmp_name']);
    			$extension = strrchr($_FILES[$champFile]['name'], '.'); 
     
    			//verif data
    			if (!in_array($extension, $extensions)){
    				$erreur = "extension fichier ".$fichier." pas correcte : ".$extension;
    			}
     
    			if ($taille > $taille_maxi){
    				$erreur = "image trop grosse";
    			}

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2007
    Messages : 193
    Par défaut
    Je n'ai pas trouvé l'erreur mais à votre place j'utiliserai getimagesize() qui renvoie le type mime de l'image. Cette donnnée est beaucoup plus sûr car en testant juste textuellement l'extension un utilisateur pourrait faire passer dans le script n'importe quel type de fichier renommé en .jpg par exemple.

  3. #3
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    En ce qui concerne la sécurité, voir cette discussion : dans les références indiquées, il y en a une qui dit que getimagesize() peut être trompé. Personnellement, ce que j'ai fait et qui semble plutôt pas mal :
    1. Je fais un $file_info = pathinfo($_FILES["fichier"]["name"])
    2. J'examine la valeur de strtolower($file_info["extension"]) et je n'accepte que les valeurs "gif", "jpg" et "jpeg" par exemple.
    3. J'examine de nouveau strtolower($file_info["extension"]) : en fonction de la valeur renvoyée ("gif", "jpeg", "jpg"), je fais un $image = @imagecreatefromgif($_FILES["fichier"]["tmp_name"]) ou $image = @imagecreatefromjpeg($_FILES["fichier"]["tmp_name"])
    4. Je regarde $image : si c'est une image valide, c'est bon, sinon, message d'erreur


    Pour revenir à ton pb, pour vérifier l'extension, je te suggère de faire comme moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $extensions       = array('png', 'gif', 'jpg', 'jpeg', 'bmp');
    ...
    $file_info = pathinfo($_FILES[$champFile]['name']);
    $extension = strtolower($file_info['extension']);

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 13
    Par défaut
    Merci pour votre aide.

    La solution de _Mac_ semble bien fonctionner.

    Néanmoins, je n'arrive pas encore à l'uploader une image :la vérif extension est ok, la vérif taille fichier est ok, maintenant ca coince au niveau du fichier temporaire temp_name.

    Vois pas bien ce qu'il faut faire avec temp_name

    J'ai aussi fais un chmod sur le fichier de destination définitive

    Merci encore pour votre aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    $fichier = pathinfo($_FILES[$champFile]['name']);
    $taille = filesize($_FILES[$champFile]['tmp_name']);
    $extension = strtolower($fichier['extension']);
     
    //verif1
    if (!in_array($extension, $extensions)){
    				$erreur = "L'extension du fichier ".$fichier." n'est pas conforme : ".$extension;
    			}
    //verif2
    if ($taille > $taille_maxi){
    				$erreur = "Le fichier est trop gros";
    			}
    //verif3
    if (!isset($erreur)) {
    			$fichier = strtr($fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
    			$fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
    			$upload = move_uploaded_file($_FILES[$champFile]['tmp_name'], $dossier . $fichier);
     
    if ($upload){
    			chmod($dossier . $fichier, 0777);
    				} else {
    			$fichier = "Echec de l'upload !";
    				}
    				return $fichier;
    			} else {
    				echo $erreur;
    			}	
    		}

  5. #5
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Citation Envoyé par sadao Voir le message
    maintenant ca coince au niveau du fichier temporaire temp_name.
    Ca veut dire quoi exactement ? Quel est le pb exact rencontré ? Il passe dans ton if ? Est-ce que $dossier a bien la bonne valeur ? Est-ce que le répertoire existe bien et que l'utilisateur Apache/PHP peut écrire dedans ?

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Je rappelle que le protocole HTTP (pour PHP du moins), n'est pas utilisable en écriture ! Votre chemin de destination (http//www.monsite.com/images/) est donc incorrect et la fonction move_uploaded_file doit d'ailleurs générer un message d'erreur à ce sujet.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 04/06/2013, 14h38
  2. [MySQL] Traitement des données sur une checkbox - Formulaire
    Par kenjiendo dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 08/08/2011, 11h35
  3. Traitement des données provenant d'un formulaire
    Par captainflex dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 03/05/2007, 15h21
  4. Problème: formulaire et traitement des données
    Par Pahcixam dans le forum Langage
    Réponses: 3
    Dernier message: 29/10/2006, 04h37
  5. [Formulaires] Traitement des données dans une autre page...
    Par sekiryou dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 04/03/2006, 09h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo