Vérification du mime-type, de l'extension et de la taille

Résolu
max30_3775 Messages postés 185 Statut Membre -  
max30_3775 Messages postés 185 Statut Membre -
Bonjour,
Je sollicite votre aide pour vérifier l'extension et la taille d'une image lorsqu'un utilisateur ajoute cette dernière, histoire d'éviter de mauvaises surprises dans l'avenir:
Voici ma fonction savephoto:
function savePhoto($id_annonce,$file,$location){

    if(empty($file)){
      echo "<br> ERREUR : Aucune image n'est envoyées pour l'upload";
      var_dump($_FILES); 
      return false; 
    }

    $error='';
//mime-type
$mime_types = array('png' => 'image/png',
'jpe' => 'image/jpeg',
'jpeg' => 'image/jpeg',
'jpg' => 'image/jpeg',
'gif' => 'image/gif');


//taille
$taille_maxi= 3Mo;

    $photo = $file['name'];
    $photo_tmp = $file['tmp_name'];

if(isset($mime_types)){
  
  if ($photo>$taille_maxi)
  {$error = 'Le fichier est trop gros...';}

    if(move_uploaded_file($photo_tmp,$location.$photo)){
       return insertPhoto($id_annonce,$location.$photo); 
  } else{
    $error = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg...';
  }
}


Configuration: Windows / Chrome 97.0.4692.71

6 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    $photo_taille = $file['size'];
    1
  2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Bonjour,

    
    function savePhoto($id_annonce,$file,$location){
    
      if(empty($file)){
        echo "<br> ERREUR : Aucune image n'est envoyées pour l'upload";
        return false; //pas d'image
      }
    
      //taille
      $taille_maxi= 100000; // A noter qu'il y a aussi un paramétrage dans le php.ini pour limiter la taille max des fichiers qu'on peut uploader!
    
      $photo_taille = $file['size'];
      $photo = $file['name'];
      $photo_tmp = $file['tmp_name'];
    
      
      if (is_uploaded_file($photo_tmp)) {
        // Notice how to grab MIME type.
        $mime_type = mime_content_type($photo_tmp);
        
        
        //mime-type
        $allowedMimes = array(
         'image/png',
         'image/jpeg',
         'image/jpeg',
         'image/jpeg',
         'image/gif'
        );
    
        if(!in_array($mime_type,$allowedMimes){
          echo "Type de fichier " . $mime_type . " invalide !";
          return false;
        }
        
          //pour les tests:
        echo "<br>photo_taille : " . $photo_taille;
        echo "<br>taille_maxi : " . $taille_maxi;
        
        
        if ($photo_taille > $taille_maxi){
          echo 'Le fichier est trop gros...';
          return false;
        }
    
        if(move_uploaded_file($photo_tmp,$location.$photo)){
           return insertPhoto($id_annonce,$location.$photo); 
        }
        
        
      }else{
        echo "<br>Erreur lors de l'upload du fichier !";
        return false; 
      }
    }
    


    1
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      J'ai édité le code pour corriger un souci au niveau du mime_types.
      1
  3. max30_3775 Messages postés 185 Statut Membre
     
    Bonjour yg_be, merci pour ta réponse :)
    Je n'ai pas d'erreur. J'ai dû changer l'unité Mo de la variable $taille_maxi, et laissé celle sans unité.
    Question: C'est combien 100000? Est-ce 10 Mo ou 1 Mo?
    function savePhoto($id_annonce,$file,$location){
    
        if(empty($file)){
          echo "<br> ERREUR : Aucune image n'est envoyées pour l'upload";
          var_dump($_FILES); 
          return false; //pas d'image
        }
    
        $error='';
    //mime-type
    $mime_types = array('png' => 'image/png',
    'jpe' => 'image/jpeg',
    'jpeg' => 'image/jpeg',
    'jpg' => 'image/jpeg',
    'gif' => 'image/gif');
    
    
    //taille
    $taille_maxi= 100000;
    
    $photo_taille = $file['size'];
        $photo = $file['name'];
        $photo_tmp = $file['tmp_name'];
    
    if(isset($mime_types)){
      
      if ($photo_taille>$taille_maxi)
      {$error = 'Le fichier est trop gros...';}
    
        if(move_uploaded_file($photo_tmp,$location.$photo)){
           return insertPhoto($id_annonce,$location.$photo); 
      } else{
        $error = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg...';
      }
    }
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      l'unité de taille est l'octet.
      pour un fichier, une taille de 100000 octets, cela fait environ 98 Ko.
      1
  4. max30_3775 Messages postés 185 Statut Membre
     
    Mais pourquoi lorsque j'ai ajouté une image à 1 294 160 octets ça n'affiche pas que le fichier est trop gros?
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      ajoute peut-être un echo().
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. max30_3775 Messages postés 185 Statut Membre
     
    J'ai ajouté un echo et ça n'a pas affiché l'erreur:
    function savePhoto($id_annonce,$file,$location){
    
        if(empty($file)){
          echo "<br> ERREUR : Aucune image n'est envoyées pour l'upload";
          var_dump($_FILES); // juste pour le debug...
          return false; //pas d'image
        }
    
    //mime-type
    $mime_types = array('png' => 'image/png',
    'jpe' => 'image/jpeg',
    'jpeg' => 'image/jpeg',
    'jpg' => 'image/jpeg',
    'gif' => 'image/gif');
    
    
    //taille
    $taille_maxi= 100000;
    
    $photo_taille = $file['size'];
        $photo = $file['name'];
        $photo_tmp = $file['tmp_name'];
    
    if(isset($mime_types)){
      
      if ($photo_taille>$taille_maxi)
      {echo 'Le fichier est trop gros...';}
    
        if(move_uploaded_file($photo_tmp,$location.$photo)){
           return insertPhoto($id_annonce,$location.$photo); 
        }
      } else{
        echo 'Vous devez uploader un fichier de type png, gif, jpg, jpeg...';
      }
    }
    
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      peut-être ajouter des éléments utiles, comme $photo_taille, dans l'echo. et, pourquoi pas, dans la foulée, faire un var-dump de $file?
      1
  7. max30_3775 Messages postés 185 Statut Membre
     
    Bonjour Jordane, ça marche parfaitement. Si la taille de l'image est supérieure à, l'annonce n'affiche pas d'image. Merci !
    0