Page 1 sur 1

Vérifier le type de fichier uploadé

Posté : 09 mai 2016, 16:37
par Silv
Bonjour à tous,

Je débute en php et je réalise un bout de code qui permet de vérifier le fichier uploadé par l’internaute (fichier image).

Trois Vérifications se font sur le fichier :

1 --> Le type
2 --> Le poids
3 --> les dimensions

Chaque vérification génère un message personnalisé pour internaute si son fichier ne respecte pas les conditions. (ex pour le poids : "le poids dépasse la limite autorisée")

J'ai fais quelques tests sur mon code PHP et la vérification se fait bien sur le poids (s'il dépasse = message d'erreur) et sur les dimensions (si différent = message d'erreur)

Par contre lorsque je teste la condition au niveau du type de fichier afin de vérifier que celui-ci est bien un jpg ou jpeg, le message d'erreur qui apparaît est celui des dimensions (le dernier dans la liste des conditions). Et je ne comprends pas d'où vient le problème...

Voici mon code :
<html>

	<head>
        <meta http-equiv="Content-type" content="text/html;charset=UTF-8">
    </head>

    <body>
        
        <?php
            if (isset($_FILES['fichier'])) 
        { 
        //$_FILES existe on récupère les infos qui nous intéressent 
        $fichier=$_FILES['fichier']['name'];//nom réel de l'image 
        $size=$_FILES['fichier']['size']; //poids de l'image en octets 
        $tmp=$_FILES['fichier']['tmp_name'];//nom temporaire de l'image (sur le serveur) 
        $type=$_FILES['fichier']['type'];//type de l'image
        //On récupère la taille de l'image 
        list($width,$height)=getimagesize($tmp); 
                
            if (is_uploaded_file($tmp)) //permet de vérifier si le fichier a été uplodé via http 
            { 
                
            //vérification du type de l'img, son poids et sa taille 
              if ($type=="image/jpeg" || $type=="image/jpg")
            { 
                  
              if ($size<=180000)
            { 
                
                if ($width==1500 && $height>=800 )
            { 
                      
       
            if (file_exists('./images_up/'.$fichier)) 
            { 
            //Le fichier existe on rajoute dans son nom le timestamp du moment pour le différencier de la première (comme cela on est sûr de ne pas avoir 2 images avec le même nom ) 
            $nom_final= preg_replace("`.jpeg`is",date("U").".jpeg",$fichier); 
            } 
                
            else { 
            $nom_final=$fichier; //l'image n'existe pas on garde le même nom 
            } 
                
        //on déplace l'image dans le répertoire final 
        move_uploaded_file($tmp,'upload/'.$nom_final); 
        //Message indiquant que tout s'est bien passé 
        echo "L'image a été uploadée avec succès<br/>"; 
                
        } 
        
        else { 
        //Le type est incorrect 
        echo "Votre image a été rejetée car le format n'est pas correct, nous n'acceptons que les JPG ou JPEG. Pas de PSD, zip, gif... "; 
        } 
        }
             else { 
        //Le poids est incorrect 
        echo "Votre fichier est trop lourd, celui-ci ne peut pas depasser les 170ko"; 
        } 
        }
        else { 
        //Les dimensions sont incorrects
        echo "Les dimensions de votre habillage ne sont pas bon. Il doivent faire 1500px de large par 1000px de haut"; 
        } 
                  
        } 
        } 
        //Pour tester si l'image est bien à sa place 
        echo '<img src="./images_up/'.$nom_final.'" border="0" />'; 
        echo '<br/>'; 
        echo '<a href="javascript:history.back();">Retour</a>'; 
        ?> 

    </body>
    
</html>

Merci pour votre aide !!

Re: Vérifier le type de fichier uploadé

Posté : 09 mai 2016, 16:50
par @rthur
Bonjour,

Ton code n'est pas indenté correctement et est donc illisible ce qui t’empêche de le débuguer efficacement.
Voici l'ensemble de tes vérifications correctement indentées :
//vérification du type de l'img, son poids et sa taille 
if ($type == "image/jpeg" || $type == "image/jpg") {
    
    if ($size <= 180000) {
        
        if ($width == 1500 && $height >= 800) {
            
            if (file_exists('./images_up/' . $fichier)) {
                //Le fichier existe on rajoute dans son nom le timestamp du moment pour le différencier de la première (comme cela on est sûr de ne pas avoir 2 images avec le même nom ) 
                $nom_final = preg_replace("`.jpeg`is", date("U") . ".jpeg", $fichier);
            } else {
                $nom_final = $fichier; //l'image n'existe pas on garde le même nom 
            }
            
            //on déplace l'image dans le répertoire final 
            move_uploaded_file($tmp, 'upload/' . $nom_final);
            //Message indiquant que tout s'est bien passé 
            echo "L'image a été uploadée avec succès<br/>";
            
        } else {
            //Le type est incorrect 
            echo "Votre image a été rejetée car le format n'est pas correct, nous n'acceptons que les JPG ou JPEG. Pas de PSD, zip, gif... ";
        }
    } else {
        //Le poids est incorrect 
        echo "Votre fichier est trop lourd, celui-ci ne peut pas depasser les 170ko";
    }
} else {
    //Les dimensions sont incorrects
    echo "Les dimensions de votre habillage ne sont pas bon. Il doivent faire 1500px de large par 1000px de haut";
}
Comme tu peux le voir, ton dernier "else" correspond à ton premier "if".
Or ton dernier "else" affiche le message d'erreur de la taille, alors que ton premier "if" fait un test sur le type

Re: Vérifier le type de fichier uploadé

Posté : 09 mai 2016, 16:59
par Silv
effectivement... Merci !!