Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre régulier
    Gérer les fichiers dont la taille dépasse la taille maximale acceptée par le serveur
    Bonjour à tous,

    Voila mon problème, qui n'est pas dramatique mais qui doit surement pouvoir être résolu.

    J'ai un champ de type file qui, lorsqu'on clic dessus, ouvre une popup permettant d'aller récupérer un fichier dans un répertoire en local et de l'ajouter sur le serveur.

    La valeur upload_max_filesize du serveur en question est de 3Mo.

    Lorsqu'une personne souhaite uploader un fichier, on gère les erreurs. Si le fichier est vide, on affiche une alerte javascript. Si le fichier n'est pas un pdf, on affiche une alerte javascript ...

    Le problème est le suivant. Si une personne tente d'uploader un fichier de plus de 3Mo, l'erreur levé correspond à : le fichier est vide.

    J'ai donc regardé chaque attribut récupérer concernant le fichier et seul le nom est bien récupéré. Le type, la taille, ... ne sont pas récupérés.

    Donc voila je voulais savoir s'il y avait un moyen de savoir si le fichier est vraiment vide ou si sa taille est supérieure à 3Mo pour pouvoir afficher le bon message d'erreur.

    Voici juste le bout de code concernant les erreurs :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    if ($_FILES['userfile']['name'] == "")
    {
    ?>
                <script>
    alert("Vous devez préciser un fichier à importer.");
                </script>
                <?
    }
    else if ($_FILES['userfile']['size']== 0)
    {
    ?>
                <script>
    alert("Votre fichier est vide.");
                </script>
                <?
    }
    else if ($_FILES['userfile']['size'] > $_GET['size'])
    {
    ?>
                <script>
    alert("Pour des raisons de sécurité votre fichier doit être inférieure à <?php echo doubleval(intval($_GET['size'])/1024); ?> Ko.");
                </script>
                <?
    }


    Merci d'avance

  2. #2
    Expert confirmé
    Essai d'afficher la valeur de
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    $_GET['size']


    regarde si elle correspond à celle définie dans le formulaire
    Développeur | Zend Certified Engineer

    Étapes Pour mieux se servir du forum:
    1. Commencez par lire les cours et tutoriels ;
    2. Faites une recherche;
    3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

    Nix>_Rien n'est plus pratique que la théorie

  3. #3
    Membre régulier
    Salut,

    Quand j'ouvre ma popup je passe dans l'url la valeur size que je met donc à 3145728.

    Donc $_GET['size'] = 3145728.

    Le problème, c'est que si le fichier a uploader est > 3Mo, $_FILES['userfile']['size'] = 0.

    Donc je rentre dans la boucle :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    else if ($_FILES['userfile']['size']== 0)
    {
    ?>
                <script>
    alert("Votre fichier est vide.");
                </script>
                <?
    }


    Alors que le fichier n'est pas vide.

  4. #4
    Expert éminent sénior
    Dans ce cas-là $_FILES['userfile']['error'] n'est pas égale à la valeur de la constante UPLOAD_ERR_FORM_SIZE (voir éventuellement UPLOAD_ERR_INI_SIZE) ?

  5. #5
    Membre régulier
    A exact !

    J'avais pas penser a utilisé cette variable, j'étais bloqué sur 'size' :s.

    Si la taille est trop grande, $_FILES['userfile']['error'] = 1;
    Si le fichier est vide, $_FILES['userfile']['error'] = 0;

    Merci bien !

    A+