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 :

Fichier trop gros = réinitialisation


Sujet :

Langage PHP

  1. #1
    Membre confirmé Avatar de Artusamak
    Inscrit en
    Mai 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 76
    Par défaut Fichier trop gros = réinitialisation
    Bonjour à tous, j'ai un petit soucis au niveau de mon script d'upload de fichier, dès que j'envoie un fichier supérieur à la limite fixée dans mon script (ou par php.ini), le script se mets à déconner.

    Explication de déconner : lorsque la taille du fichier est supérieure à celle autorisée, le serveur recharge la page comme si de rien était

    Détails :

    Un formulaire avec deux champs :

    - Le nom de l'oeuvre
    - La photo de l'oeuvre (qui va être uploadée)

    Taille limite d'un fichier : 5 Mo

    Lorsque j'up un fichier inférieur à 5 Mo tout se passe bien, dès que j'up un fichier supérieur à 5 Mo, j'ai l'impression que le script tente d'envoyer le fichier (léger délai) puis recharge la page sans faire de traitement :/

    Voilà un peu de code

    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
    39
    40
    41
    42
    43
            if(isset($_POST['titre_oeuvre']))
            {
                    if(!empty($_POST['titre_oeuvre']))
                    {
                            if(isset($_FILES['photo_oeuvre']))
                            {                            
                                    $num_erreur = $_FILES['photo_oeuvre']['error'];
     
                                    switch($num_erreur)
                                    {
                                            case UPLOAD_ERR_INI_SIZE: // Trop gros (limite php.ini)
                                                    message_erreur(NO_UPLOAD_MAX_INI_SIZE,$_SERVER['PHP_SELF'],"Réenvoyer le fichier");
                                                    break;
                                            case UPLOAD_ERR_FORM_SIZE: // Trop gros (limite formulaire)
                                                    message_erreur(NO_UPLOAD_MAX_FORM_SIZE,$_SERVER['PHP_SELF'],"Réenvoyer le fichier");
                                                    break;
                                            case UPLOAD_ERR_PARTIAL: // Envoi incomplet
                                                    message_erreur(NO_UPLOAD_PARTIAL_SEND,$_SERVER['PHP_SELF'],"Réenvoyer le fichier");
                                                    break;
                                            case UPLOAD_ERR_NO_FILE: // Rien d'envoyé
                                                    message_erreur(NO_UPLOAD_NO_FILE,$_SERVER['PHP_SELF'],"Réenvoyer le fichier");
                                                    break;
                                            default:
                                                    $connexion = mysql_connect($server_db,$login_db,$password_db);
                                                    mysql_select_db($database,$connexion);
     
                                                    if($_FILES['photo_oeuvre']['size'] <= $taille_max_fichier)
                                                            echo "ok";
                                                    else
                                                            echo "trop gros";
                                                    exit();// Ajout dans la base de données
     
                                                    mysql_close($connexion);
     
                                                    break;
                                    }
                            }
                            else
                                    message_erreur(NO_WORK_PICTURE,RACINE.'gest/ajout_oeuvre.php','Corriger le problème');
                    }
                    else
                            message_erreur(NO_WORK_TITLE,RACINE.'gest/ajout_oeuvre.php','Corriger le problème');
            }

    Merci à vous si vous avez des idées.

  2. #2
    Membre émérite

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    Octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 657
    Par défaut
    PHP ne peut empecher le client d'envoyer un fichier supérieur à la taille maximale autorisé, bien que le MAX_FILE_SIZE soit un sujet parfait pour troller, dans votre cas je propose de faire un test avant de commencer le traitement des données reçues avec http://fr3.php.net/filesize

    En effet, comme expliqué dans le manuel à la section d'upload de fichiers http://fr.php.net/features.file-upload, lorsque le script termine sont execution alors qu'un fichier uploadé est plus lourd que permis, il disparait du répertoire temporaire, en revanche, il faut effectivement bien prévoir le cas grace à filesize

  3. #3
    Membre confirmé Avatar de Artusamak
    Inscrit en
    Mai 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 76
    Par défaut
    Comment accéder au chemin du fichier qui va être uploadé ? On peut accéder au nom du fichier, pas de problème mais pour utiliser filesize() il faut le chemin + le nom du fichier. Et là on a pas le chemin du fichier

    J'avais déjà fait un script d'upload et je n'avais pas ce soucis là, c'est ce qui m'étonne.

    J'ai matté tes liens, j'étais déjà allé les voir, ça ne change rien

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 297
    Par défaut
    Explication de déconner : lorsque la taille du fichier est supérieure à celle autorisée, le serveur recharge la page comme si de rien était
    c'est tout à fait normale, car la taille du fichier envoyé est trop grosse, donc automatiquement l'exécution de ton script PHP est coupé.

    is_null a tout à fait raison de dire que MAX_FILE_SIZE est un sujet de trollage, tout simplement parce qu'il est inutile.
    Il est facilement modifiable, donc MAX_FILE_SIZE est alors totalement perverti (donc inutilisable).

  5. #5
    Membre confirmé Avatar de Artusamak
    Inscrit en
    Mai 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 76
    Par défaut
    En Gros il n'y a aps de solutions ?

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 297
    Par défaut
    bah, c'est pas vraiment une erreur, étant donner que c'est normale

    c'est une mesure de sécurité, qui fait que le serveur ne prendre pas (et n'est pas surcharger de manière continue) des requêtes d'une certaine taille
    si tu veux une solution, tu dois augmenter la taille des requêtes que le serveur peut prendre...

  7. #7
    Membre éclairé
    Homme Profil pro
    Responsable d'une MOE bancaire
    Inscrit en
    Juillet 2003
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable d'une MOE bancaire

    Informations forums :
    Inscription : Juillet 2003
    Messages : 261
    Par défaut
    Citation Envoyé par Artusamak
    Comment accéder au chemin du fichier qui va être uploadé ? On peut accéder au nom du fichier, pas de problème mais pour utiliser filesize() il faut le chemin + le nom du fichier. Et là on a pas le chemin du fichier
    tu peux faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    filesize($_FILES['userfile']['tmp_name'])
    EDIT: en fait, quand tu essaye d'uploader un fichier trop gros, et ton script revient à la page initiale, t'as pas la notion 'Corriger le problème'?

  8. #8
    Membre confirmé Avatar de Artusamak
    Inscrit en
    Mai 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 76
    Par défaut
    Citation Envoyé par SegmentationFault
    tu peux faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    filesize($_FILES['userfile']['tmp_name'])
    EDIT: en fait, quand tu essaye d'uploader un fichier trop gros, et ton script revient à la page initiale, t'as pas la notion 'Corriger le problème'?

    Je n'ai pas compris ton edit...

    L'idée c'était de tester la taille du fichier à up avant de l'envoyer pour éviter de faire le traitement pour rien mais en gros c'est pas possible, le filesize sera toujours fait par rapport au fichier uploader.

    Je ferai avec, merci les gens.

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 297
    Par défaut
    Tu peux contrôler la taille du fichier avant l'upload, mais pour ça il faut que tu utilises autre chose que PHP (Flash ou Perl par exemple)
    car PHP ne s'exécute quand une fois, et qu'une fois qu'il a tout reçu.

    Il n'y a pas de problème là en réalité, étant donné que c'est normale (le serveur est paramétré pour avoir cette réaction, il stop l'exécution du script.)

  10. #10
    Membre confirmé Avatar de Artusamak
    Inscrit en
    Mai 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 76
    Par défaut
    J'ai bien compris. Merci à vous deux

  11. #11
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 297
    Par défaut
    Il te reste plus qu'à te mettre à d'autre langage ;p

    Tu peux facilement trouver des scripts PHP/CGI pour l'upload de fichier avec des barre de progression qui empêche au tout début l'upload de fichier que le serveur ne peut pas prendre

  12. #12
    Membre confirmé Avatar de Artusamak
    Inscrit en
    Mai 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 76
    Par défaut
    Lol ouai ^^

    Reste plus que ça à faire

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 09/09/2009, 16h04
  2. [PHP 5.0] Prévenir utilisateur que fichier trop gros
    Par afrodje dans le forum Langage
    Réponses: 2
    Dernier message: 05/03/2009, 10h08
  3. formulaire non soumis si fichier trop gros
    Par atom41 dans le forum Langage
    Réponses: 3
    Dernier message: 30/10/2008, 17h57
  4. Réponses: 2
    Dernier message: 21/03/2008, 16h57
  5. [Upload] fichier trop gros : serveur introuvable
    Par Patrick dans le forum Langage
    Réponses: 1
    Dernier message: 16/10/2007, 15h05

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