Upload image et extensions

Résolu
Bonjour à tous !

J'essaie de poser des conditions à mon upload d'image tout en prenant compte des extension a accepter (ce qui ne fonctionne pas...) :
// Dossier racine
$PathImage = '../../../images/logos/';

// Créer dossier si existe pas
if (!is_dir($PathImage)) {mkdir($PathImage, 0705, true);}

// 1Mo
$MaxSize = 1000000;

// Extension valides
$Ext_Valide = array('.png', '.PNG');

$_FILES['Fr_Image']['name'];
$_FILES['Fr_Image']['type'];
$_FILES['Fr_Image']['size'];
$_FILES['Fr_Image']['tmp_name'];
$_FILES['Fr_Image']['error'];


if ($_FILES['Fr_Image']['error'] > 0) $erreur = "Erreur lors du transfert de l'image.";
if ($_FILES['Fr_Image']['size'] > $MaxSize) $erreur = "Le fichier est trop volumineux.";

$Extension = strrchr($_FILES['Fr_Image']['name'], '.');
if (!in_array($Extension, $Ext_Valide)) {
 $erreur = "Vous devez uploader un fichier de type .PNG";}


$Fr_Marque  = mb_strtoupper($Fr_Marque,'UTF-8');
$Texte  = $Fr_Marque;
$search  = array('À','Á','Â','Ã','Ä','Å','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ò','Ó','Ô','Õ','Ö','Ù','Ú','Û','Ü','à','á','â','ã','ä','å','ç','è','é','ê','ë','ì','í','î','ï','ð','ò','ó','ô','õ','ö','ù','ú','û','ü','ý','ÿ');
$replace = array('A','A','A','A','A','A','C','E','E','E','E','I','I','I','I','O','O','O','O','O','U','U','U','U','a','a','a','a','a','a','c','e','e','e','e','i','i','i','i','o','o','o','o','o','o','u','u','u','u','y','y');
$TexteValid = str_replace($search, $replace, $Texte);
$Remplace = preg_replace('/([^.A-Za-z0-9]+)/i', '-', $TexteValid);

$Fr_Lien = strtolower($Remplace);

$Fr_Image = strtolower($Remplace).$Extension;
$Resultat = move_uploaded_file($_FILES['Fr_Image']['tmp_name'], $PathImage.$Fr_Image);


J'ai même essayé avec :
$Extension = pathinfo($_FILES['Fr_Image']['name'], PATHINFO_EXTENSION);
if(!in_array($Extension,$Ext_Valide)) $erreur = "L'extension de l'image est incorrecte.";

Mais ça ne marche pas. Vous avez idée svp ?

3 réponses

  1. Salut,

    Ta vérification semble correcte. As tu vérifier la valeur de la variable $Extension lors de l'upload d'un fichier ?
    1. Merci Pitet de t'intéresser au poste.

      Lorsque je fais un echo à
      $Extension = pathinfo($_FILES['Fr_Image']['name'], PATHINFO_EXTENSION);
      il me revoit
      txt
      ou
      png
      mais garde l'erreur que le fichier soit bon ou pas.

      J'ai changé le code de ma page pour essayer de mieux organiser, mais rencontre toujours le même soucis :

      if (isset($_POST["action"]) && $_POST["action"] == "send"){
      
      
      $Ext_Valide 	= "";
      $Extension 		= "";
      $Fr_Marque 		= "";
      $Fr_Lien 		= "";
      $Remplace 		= "";
      $Texte			= "";
      
      
      // Récupération des valeurs
      $_FILES['Fr_Image']['name'];
      $_FILES['Fr_Image']['type'];
      $_FILES['Fr_Image']['size'];
      $_FILES['Fr_Image']['tmp_name'];
      $_FILES['Fr_Image']['error'];
      
      $Fr_Marque		= $_POST["Fr_Marque"];							$Fr_Marque		= stripslashes($Fr_Marque);
      $Fr_Pays_CI		= isset($_POST["Fr_Pays_CI"]) ? "1" : "0";		$Fr_Pays_CI		= stripslashes($Fr_Pays_CI);
      $Fr_Pays_SN		= isset($_POST["Fr_Pays_SN"]) ? "1" : "0";		$Fr_Pays_SN		= stripslashes($Fr_Pays_SN);
      
      
      // Dossier racine
      $PathImage = '../../../images/logos/';
      
      // Créer dossier si existe pas
      if (!is_dir($PathImage)) {mkdir($PathImage, 0705, true);}
      
      // 1Mo
      $MaxSize = 1000000;
      
      // Extension valides
      $Ext_Valide = array('png', 'PNG');
      
      // Récupère l'extension du fichier uploadé
      $Extension = pathinfo($_FILES['Fr_Image']['name'], PATHINFO_EXTENSION);
      
      // Convertis $Marque en majuscule
      $Fr_Marque  = mb_strtoupper($Fr_Marque,'UTF-8');
      $Texte		= $Fr_Marque;
      
      // Remplace les caractère accentués
      $search		= array('À','Á','Â','Ã','Ä','Å','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ò','Ó','Ô','Õ','Ö','Ù','Ú','Û','Ü','à','á','â','ã','ä','å','ç','è','é','ê','ë','ì','í','î','ï','ð','ò','ó','ô','õ','ö','ù','ú','û','ü','ý','ÿ');
      $replace	= array('A','A','A','A','A','A','C','E','E','E','E','I','I','I','I','O','O','O','O','O','U','U','U','U','a','a','a','a','a','a','c','e','e','e','e','i','i','i','i','o','o','o','o','o','o','u','u','u','u','y','y');
      $TexteValid = str_replace($search, $replace, $Texte);
      
      // Remplace les caractères spéciaux par des '-'
      $Remplace	= preg_replace('/([^.A-Za-z0-9]+)/i', '-', $TexteValid);
      
      // Convertis $Remplace en minuscule
      $Fr_Lien	= strtolower($Remplace);
      
      // Convertis $Remplace en minuscule et ajoute l'extension
      $Fr_Image = strtolower($Remplace).$Extension;
      
      
      
      echo 'Ext_Valide: '.$Ext_Valide.'<br />';
      echo 'Extension: '.$Extension.'<br />';
      echo 'in_array: '.in_array($Ext_Valide);
      
      
      
      if($Extension <> in_array($Ext_Valide)) 	{$_GET["msg"] = urlencode("L'extension de l'image est incorrecte. Veuillez choisir un fichier de type .png");}else{
      if($_FILES['Fr_Image']['size'] > $MaxSize) 	{$_GET["msg"] = urlencode("Le fichier est trop volumineux.");}else{
      if($_FILES["Fr_Image"]["error"] != 0) 		{$_GET["msg"] = urlencode("Veuillez renseigner le champ « <strong>Image</strong> »");}else{
      if(empty($Fr_Marque)) 						{$_GET["msg"] = urlencode("Veuillez renseigner le champ « <strong>Marque</strong> »");}else{
      if(empty($Fr_Lien)) 						{$_GET["msg"] = urlencode("Veuillez renseigner le champ « <strong>Lien</strong> »");}else{
      
      
      
      
      
      
      
      // Enregistrement dans la base
      $req_fr = $pdo->prepare ("INSERT INTO tb_marques (Image, Marque, Lien, CI, SN) VALUES (:Fr_Image, :Fr_Marque, :Fr_Lien, :Fr_Pays_CI, :Fr_Pays_SN)");
      $req_fr ->execute(array(
      "Fr_Image"			=> $Fr_Image,
      "Fr_Marque"			=> $Fr_Marque,
      "Fr_Lien"			=> $Fr_Lien.'.php',
      "Fr_Pays_CI"		=> $Fr_Pays_CI,
      "Fr_Pays_SN"		=> $Fr_Pays_SN ));
      
      
      // Upload de l'image sur le serveur
      $Resultat = move_uploaded_file($_FILES['Fr_Image']['tmp_name'], $PathImage.$Fr_Image);
      
      
      
      
      
      
      // Message de confirmation
      if($req_fr){echo('<div class="Message">L\'enregistrement a été ajouté avec succès.</div>'.$Renvois_0);
      }else{
      
      // Message d'erreur
      echo('<div class="Erreur">Une erreur est survenue lors de l\'enregistrement.</div>'.$Renvois_0);}exit();}
      }}}
      }}
      
      // Mon message d'erreur
      if (!empty($_GET["msg"])){$msg = urldecode($_GET["msg"]); $msg = stripslashes($msg); echo('<div class="Erreur">'.$msg.'</div>'.$Renvois_0);}
      
      
      $Renvois_1 = '<script type="text/javascript">window.setTimeout("location=(\'index.php\');",5000)</script>';
      $Renvois_2 = '<script type="text/javascript">window.setTimeout("location=(\'ajouter.php\');",5000)</script>';
      1. J'ai trouvé ^^

        Il suffisait de remplacer :
        if($Extension <> in_array($Ext_Valide)) 	{$_GET["msg"] = urlencode("L'extension de l'image est incorrecte. Veuillez choisir un fichier de type .png");}else{

        par :
        if(!in_array($Extension, $Ext_Valide))	 	{$_GET["msg"] = urlencode("L'extension de l'image est incorrecte. Veuillez choisir un fichier de type .png");}else{


        Donc mettre les deux variables dans le
        in_array
        o'

        Merci Pitet pour ton aide, tu vois j'évolue :p