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

Résolu/Fermé
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022 - Modifié le 19 janv. 2022 à 07:23
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022 - 19 janv. 2022 à 12:41
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
A voir également:

6 réponses

yg_be Messages postés 23233 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 septembre 2024 Ambassadeur 1 538
19 janv. 2022 à 07:51
bonjour,
$photo_taille = $file['size'];
1
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689
Modifié le 19 janv. 2022 à 11:48
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
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689
19 janv. 2022 à 11:49
J'ai édité le code pour corriger un souci au niveau du mime_types.
1
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022
19 janv. 2022 à 08:18
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
yg_be Messages postés 23233 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 septembre 2024 1 538
19 janv. 2022 à 08:35
l'unité de taille est l'octet.
pour un fichier, une taille de 100000 octets, cela fait environ 98 Ko.
1
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022
19 janv. 2022 à 09:14
Mais pourquoi lorsque j'ai ajouté une image à 1 294 160 octets ça n'affiche pas que le fichier est trop gros?
0
yg_be Messages postés 23233 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 septembre 2024 1 538
19 janv. 2022 à 09:48
ajoute peut-être un echo().
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022
19 janv. 2022 à 10:01
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
yg_be Messages postés 23233 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 septembre 2024 1 538
19 janv. 2022 à 11:26
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
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022
19 janv. 2022 à 12:41
Bonjour Jordane, ça marche parfaitement. Si la taille de l'image est supérieure à, l'annonce n'affiche pas d'image. Merci !
0