IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Langage PHP Discussion :

move_uploaded_file et taille [PHP 5.2]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 206
    Par défaut move_uploaded_file et taille
    Bonjour,
    j'essaye de mettre en place un petit upload de fichier.
    J'ai pris ce code :
    test_upload.html
    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
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>Oui Un Jour Oui Toujours</title>
    <link href="style.css" rel="stylesheet" type="text/css">
    </head>
     
    <body>
     
    	<form method="POST" action="upload.php" enctype="multipart/form-data">
    		 <!-- On limite le fichier à 100Ko -->
    		 <p>
    		 <input type="hidden" name="MAX_FILE_SIZE" value="100000">
    		 Fichier : <input type="file" name="avatar">
    		 <input type="submit" name="envoyer" value="Envoyer le fichier">
    		 </p>
    	</form>
     
    </body>
    </html>
    upload.php
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    <?php
    $dossier = 'upload/';
    $fichier = basename($_FILES['avatar']['name']);
    $taille_maxi = 100000;
    $taille = filesize($_FILES['avatar']['tmp_name']);
    $extensions = array('.png', '.gif', '.jpg', '.jpeg');
    $extension = strrchr($_FILES['avatar']['name'], '.'); 
    //Début des vérifications de sécurité...
    if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
    {
         $erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...';
    }
    if($taille>$taille_maxi)
    {
         $erreur = 'Le fichier est trop gros...';
    }
    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['avatar']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
         {
              echo 'Upload effectué avec succès !';
         }
         else //Sinon (la fonction renvoie FALSE).
         {
              echo 'Echec de l\'upload !';
         }
    }
    else
    {
         echo $erreur;
    }
    ?>
    Le probleme étant que je n'arrive pas à uploader un fichier de plus de 200ko.
    Dans mon phpinfo, j'ai :
    file_uploads: On
    upload_max_filesize: 2M
    upload_tmp_dir: C:/22/wamp/tmp

    Quelqu'un pourrait m'aider svp ?
    Merci

  2. #2
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut


    Pour avoir la taille du fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $taille = filesize($_FILES['avatar']['size']);
    (size et non tmp_name)

    Petit réflexe qu'il faut avoir quand on bloc, c'est de faire des echo ou, print_r ou autre var_dump.

    Un print_r renvoie :
    Array
    (
    [un_fichier] => Array
    (
    [name] => le_nom.jpg
    [type] => image/jpeg
    [tmp_name] => ......\php1C.tmp
    [error] => 0
    [size] => 50000
    )
    )

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 206
    Par défaut
    Salut,

    Ta proposition sur la taille génère un warning :
    Warning: filesize() [function.filesize]: stat failed for 1733 in C:\www\upload.php on line 6
    Sinon, j'ai fais un var_dump($_FILES) et en résultat je constate que pour un fichier > 200ko :
    ["tmp_name"]=> string(0) ""

    Donc forcément, le "move_uploaded_file" ne fonctionne pas!

    Je teste avec un fichier de 15ko et ca fonctionne.
    Puis je teste avec un fichier de 200ko, et là ca ne marche plus.

    Mon tmp_dir est bien renseigné :
    upload_tmp_dir C:/22/wamp/tmp

    Merci d'avance.

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="hidden" name="MAX_FILE_SIZE" value="100000">
    ^^ Vous définissez la taille à 100 ko maximum ... Il faut commercer par vérifier $_FILES['avatar']['error'] ...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 206
    Par défaut
    Effectivement :-/

    Merci beaucoup :-)

  6. #6
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    J'ai fais une petite erreur

    Suffit juste faire comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $taille = $_FILES['avatar']['size'];
    Ou alors plus directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
    if((int)$_FILES['avatar']['size'] > $taille_maxi)
    ...
    La fonction filesize() ne sert à rien, le tableau $_FILES renvoie la taille du fichier.

    Tu dois maintenant obtenir la taille réelle du fichier, la condition devrait être bonne.
    Ceci dit, je doute que 100000 octets soit une valeur correcte, faudrait l'augmenter pour obtenir l'équivalent de 200Ko non ?


    [edit]
    Une recherche sur GG pour avoir un petit rapport Ko / Mo / octets :
    100 Kilo octet = 102 400 Octets
    200 Kilo octet = 204 800 Octets
    2 Mega octet = 2 097 152 Octets
    [/edit]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Connaitre la taille de la RAM
    Par dway dans le forum Assembleur
    Réponses: 23
    Dernier message: 15/09/2004, 11h05
  2. taille maximale d'une base de donnée paradox
    Par Anonymous dans le forum Paradox
    Réponses: 5
    Dernier message: 14/02/2004, 18h39
  3. Réponses: 3
    Dernier message: 22/07/2002, 15h19
  4. taille du texte dans un viewport
    Par pitounette dans le forum OpenGL
    Réponses: 3
    Dernier message: 22/07/2002, 13h06
  5. comment réduire une image jpeg (taille x*y)
    Par don-diego dans le forum C
    Réponses: 4
    Dernier message: 14/07/2002, 21h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo