8768 sujets

Développement web côté serveur, CMS

Bonjour,

ça fait un moment que je ne suis pas venu sur le forum, j'ai pas mal progressé depuis !

Cependant j'ai écris une fonction pour me permettre de filtrer les extension des fichier lors d'un upload.
$AUTH_EXT = array(".pdf", ".rar", ".zip");
        function isExtAutorized($ext){
            global $AUTH_EXT;
            if(in_array($ext, $AUTH_EXT))
            {
                return true;
            }else {
                return false;
            }
        }
        $dossier = '../../rapport/';
        $fichier = basename ($_FILES['lien']['name']);
        $taille_maxi = 100000;
        $taille = filesize ($_FILES['lien']['tmp_name']);
        $extension = strrchr ($_FILES['avatar']['name'], '.'); 
        echo $extention;
        //Début des vérifications de sécurité...
        if (isExtAutorized($extension)) //Si l'extension n'est pas dans le tableau
        {

            if ($taille>$taille_maxi)
            {
                $file_auth = $_FILES['lien']['name'];
                if (!isset ($erreur)) //S'il n'y a pas d'erreur, on upload
                {
                    //On formate le nom du fichier ici...
                    $fichier = strtr ($fichier, 
                      'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
                      'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
                    $fichier = preg_replace ('/([^.a-z0-9]+)/i', '-', $fichier);
                    if (move_uploaded_file ($_FILES['lien']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
                    {
                        $req =$cnx->prepare("SELECT * FROM dossiers WHERE nom = :nom") or die("Error REQ!".$req.mysql_error());
                        $req->execute(array(
                            "nom"=>$_POST['nom']
                        ));
                        $fichier = false;
                        while($row = $req->fetch(PDO::FETCH_ASSOC))
                        {
                            $fichier = true;
                        }if($fichier == true)
                        {
                            header('location: Addrapport.php?err=3');
                        }
                        $sql = $cnx->prepare('INSERT INTO dossiers(IDRapport, nom, file, date, IDClient)
                        VALUES("", :nom, :file, curdate(), :client)') or die(print_r($cnx->errorInfo(), TRUE));
                        $sql->execute(array(
                            "nom"=>$_POST['nom'],
                            "file"=>$file_auth,
                            "client"=>$_POST['clients']
                            ));
                        header('location: Addrapport.php?err=1');
                    }else  //Sinon (la fonction renvoie FALSE).
                    {
                        header('location: Addrapport.php?err=2');
                    }
                }else {
                    echo  $erreur;
                }
            }else {
                header('location: Addrapport.php?err=5');
            }
        }else {
            header('location: Addrapport.php?err=4');
        }     
    }else {
        /************  HEADER ************/
        include("../includes/header.php");?>    
        <div id="contenue" class="row contenue-tablaux">
            <?php if(isset($_GET['err']))
            {?>
                <div class="text-center col-lg-12"><?php
                  if($_GET['err'] == 1)
                  {?>
                    <p class="text-success bg-success"><small>Vous venez d'ajouter un nouveau fichier !</small></p><?php
                  }
                  if($_GET['err'] == 2)
                  {?>
                    <p class="text-danger bg-danger"><small>Echec de l'envoi !</small></p><?php
                  }
                  if($_GET['err'] == 3)
                  {?>
                    <p class="text-danger bg-danger"><small>Le nom du rapport éxiste déjà !</small></p><?php
                  }
                  if($_GET['err'] == 4)
                  {?>
                    <p class="text-danger bg-danger"><small>Vous devez ajouter un fichier de type .pdf, .rar ou .zip !</small></p><?php
                  }
                  if($_GET['err'] == 5)
                  {?>
                    <p class="text-danger bg-danger"><small>Le fichier est trop gros...!</small></p><?php
                  }?>
                </div><?php


Avec ce code je tombe sur mon erreur 4 donc je n'arrive pas a tester l'extension du fichier avec ma fonction j'aimerais juste savoir ce qui peu clocher.

Merci
Salut,

C'est sale Smiley langue

Non, je plaisante.

Alors, déja, je ne sais pas pourquoi tu fais une fonction qui fait un return true/false, sachant que tu retourne exactement la même chose que in_array.

Je pense que tu devais plutôt t'arrêter plus que d'imbriquer tes IF

Genre :


if (!in_array($tab, $extention)
die();
if (!autreverification)
die();


C'est peu être un point de vu perso. Mais ça facilite le débug comme dans ton cas, car tu peux commenter les if précédents.

Pour récupérer l'extention, il y a une fonction qui existe. Sinon moi je fais un split() sur les . et j'utilise end() pour avoir la dernière (de mémoire).

Essaie d'afficher l'extension que tu récupères, et celle à laquelle tu compares. A mon avis c'est un oubli du genre 1 caractère de trop ou de moins.

Bon courage Smiley smile
Merci de ton aide
Je veux enregistré mon lien en base que lorsque j'ai la bonne extension. D'où ma cascade de if !!!