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 :

Intercepter le Warning de taille max d'upload de fichier dans le php.ini


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Février 2010
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 277
    Points : 64
    Points
    64
    Par défaut Intercepter le Warning de taille max d'upload de fichier dans le php.ini
    Bonsoir,

    L'upload de fichier dans les formulaires via le paramètre $_FILES se fait sans problème. J'arrive a configurer le MAX_FILE_SIZE dans un champ de type input hidden. J'intercepte bien les erreurs avec le champ $_FILES['fichier']['error'] y compris lorsque le MAX_FILE_SIZE du formulaire est dépassé.

    En revanche je n'arrive pas du tout a intercepter le warning qui apparait lorsque la taille du fichier uploadé est supérieurs a la taille maximum configuré dans le fichier php.ini du server web/php (par default c'est 8 Mo = 8388608 octets).

    En réalité mon script est fait de telle façon que ce me fout en l'air toute la page parce que en même temps je perd toute les infos du formulaire (toutes le variable sont vide) et en particulier des paramètres cachés/hidden dont j'ai absolument besoin.

    Question 1: comment intercepter ce gros warning sur la taille du fichier supérieure à celle configurer dans le fichier php.ini du serveur ?

    Question 2: comment conserver le bénéfice des autres variable (champ du formulaire) dont j'ai besoin pour afficher ma page, même si on va au delà de la taille max configuré dans le php.ini ? (il est sans doute possible que la question 1 résolue, résous en même temps la question 2)

    Le warning qui bloque tout est le suivant:

    Warning: POST Content-Length of 12603853 bytes exceeds the limit of 8388608 bytes in Unknown on line 0
    Merci.

  2. #2
    Membre averti Avatar de Njörd
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 190
    Points : 390
    Points
    390
    Par défaut
    Bonjour Jolt0x,

    Un peu de lecture Explication sur les messages d'erreurs de chargement de fichiers

    N'hésite pas à regarder la suite de la documentation concernant les fichiers téléchargés.

    Pour ce qui est de la pertes des informations lorsqu'il y a une erreur, tu peux sauvegarder les informations en sessions. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $_SESSION['paramsForm'] = array(
       'champ_hidden_1' => strip_tags($_POST['champ_hidden_1']),
       'champ_hidden_2' => strip_tags($_POST['champ_hidden_2']),
       'variable_1' => strip_tags($_POST['variable_1']),
       'variable_2' => strip_tags($_POST['variable_2']),
    );
    et dans ton formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <form .... method="POST">
        <input type="hidden" ....... value="<?php if( isset($_SESSION['champ_hidden_1']) ) { echo $_SESSION['champ_hidden_1']; } ?>" />
        <input type="hidden" ....... value="<?php if( isset($_SESSION['champ_hidden_2']) ) { echo $_SESSION['champ_hidden_2']; } ?>" />
        <input type="text" ....... value="<?php if( isset($_SESSION['variable_1']) ) { echo $_SESSION['variable_1']; } ?>" />
        <input type="text" ....... value="<?php if( isset($_SESSION['variable_2']) ) { echo $_SESSION['variable_2']; } ?>" />
        <input type="submit" ... />
    </form>
    et quand le formulaire est OK et enregistré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    unset($_SESSION['paramsForm']);
    Enjoy

  3. #3
    Membre du Club
    Inscrit en
    Février 2010
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 277
    Points : 64
    Points
    64
    Par défaut
    Je réponds un peu tardivement. Je n'ai pas encore testé la seconde partie de ta proposition avec les session mais cela doit fonctionner.

    J'ai, avant de poster ma question, bien lu le lien que tu proposes, au sujet des erreurs lors des téléchargement de fichier et comme je l'ai dit initialement, j'intercepte bien toutes les erreurs (fichier de taille sup au MAX_FILE_SIZE, etc.) sauf le cas où le fichier est de taille supérieur au max configuré dans le fichier php.ini du serveur. Je suis particulièrement inquiet puisque l'erreur se situe a la ligne 0 (zéro) du script, cf. le warning que j'ai mis plus haut.

    Voilà une portion de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if ($PostFile['error'] == UPLOAD_ERR_OK) { // Pas d'erreur
    	$res = $this->addAttach($id_topic, $id_forum, $id_user, $id_post, $PostFile);
    	if ($res)
    		$invite .= "<div class=\"OK100pourcent\">Votre pièces jointe a correctement été attachée.</div>";
    	else
    		$invite .= "<div class=\"warning100pourcent\">Votre pièce jointe n'a pas été correctement attachée. Contactez le support.</div>";
    } else {
    	$error_message = $this->file_upload_error_message($PostFile['error']); 
    	$invite .= "<div class=\"warning100pourcent\">Votre piéce jointe n'a pas été correctement attachée. <br> <br> error_message: $error_message </div>";
    }
    et ma fonction qui affiche les messages d'erreur en fonction du code d'erreur détecté (incluant le code d'erreur pour le dépassement de taille de fichier max dans le fichier php.ini):

    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
    private function file_upload_error_message($error_code)
    {
    	switch ($error_code) { 
    		case UPLOAD_ERR_INI_SIZE: 
    			return 'The uploaded file exceeds the upload_max_filesize directive in php.ini'; 
    		case UPLOAD_ERR_FORM_SIZE: 
    			return 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form'; 
    		case UPLOAD_ERR_PARTIAL: 
    			return 'The uploaded file was only partially uploaded'; 
    		case UPLOAD_ERR_NO_FILE: 
    			return 'No file was uploaded'; 
    		case UPLOAD_ERR_NO_TMP_DIR: 
    			return 'Missing a temporary folder'; 
    		case UPLOAD_ERR_CANT_WRITE: 
    			return 'Failed to write file to disk'; 
    		case UPLOAD_ERR_EXTENSION: 
    			return 'File upload stopped by extension'; 
    		default: 
    			return 'Unknown upload error'; 
    	} 
    }

    Le problème du warning que j'ai mis plus haut, a la ligne 0, est toujours là, lorsque la taille du fichier uploadé est supérieure à la taille max configuré dans le fichier php.ini du server Apache (je suis avec EasyPHP). Le problème persiste.

    PS: dans la variable $PostFile j'ai le $_POST[attach], ou "attach" est le nom de la pièce a attacher dans mon formulaire web, le problème n'est pas là.

  4. #4
    Membre averti Avatar de Njörd
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 190
    Points : 390
    Points
    390
    Par défaut
    Bonjour Jolt0x,

    Je t'avoue je sèche
    Tu as essayé avec un var_dump de ta variable $FILE avant le if histoire de voir si ça te renvoi quelque chose quand c'est supérieur à la limite du .ini ?

    Genre si c'est pas une histoire de nombre plutôt que de constante vu qu'avant les erreurs étaient des nombres.

  5. #5
    Membre du Club
    Inscrit en
    Février 2010
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 277
    Points : 64
    Points
    64
    Par défaut
    Bonjour,

    Non, il n'y a absolument rien dans le var_dump. La variable est vide.

    J'ai toutours ce très ennuyeux warning:

    Warning: POST Content-Length of 12603747 bytes exceeds the limit of 8388608 bytes in Unknown on line 0
    Ce qui est ennuyant et même inquiétant c'est que il y a un "Unknown" (inconnu de quoi ? on ne sais pas) et que ce warning est à la ligne zero.

  6. #6
    Futur Membre du Club Avatar de jerome14000
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Je ne sais pas si c'est encore nécessaire de répondre à ce post vieux de 13 ans mais la solution c'est d'augmenter la taille de la directive post_max_size dans ton fichier php.ini et s'assurer qu'elle soit supérieur à la directive upload_max_filesize afin d'avoir la possibilité d'intercepter l'erreur lorsqu'un fichier est trop volumineux par exemple.

    Vous pouvez ré-enterrer le post ^^

  7. #7
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 165
    Points
    17 165
    Par défaut
    Citation Envoyé par jerome14000 Voir le message
    Je ne sais pas si c'est encore nécessaire de répondre à ce post vieux de 13 ans
    Le compte n'est pas bon,
    du 21 Aout 2013 (postage de la discussion)
    au 08 Novembre 2023
    soit 10 années; 2 mois 2 semaines et 4 jours ou 3731 jours
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  8. #8
    Futur Membre du Club Avatar de jerome14000
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Effectivement, j'ai confondu la date du post avec la date d'inscription (2010) du précédent interlocuteur ^^

  9. #9
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Bonjour,
    J'ai eu cette erreur avec des téléchargements de fichiers
    ... in Unknown on line 0
    Il est possible d'inclure un élément HTML donnant la taille du fichier a télécharger (je n'ai plus le nom en tête) , il est impératif de le mettre avant l'élément <input type="file" ... sinon cette erreur se produit sans autre explication, et le "inconnu en ligne 0" laisse bien perplexe lorsque cela arrive.

    Bonne soirée
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  10. #10
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    J'ai retrouvé les instructions (tournant sur une ancienne version de php) ou le MAX_FILE_SIZE permet de poser une limite (plus basse que celle du serveur forcément).
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <input type="hidden" name="MAX_FILE_SIZE" value='...>
    <input type='file' name='nomDoc'>
    Ces deux lignes doivent impérativement être dans cet ordre.
    Si elles sont inversées, l'erreur inconnue en ligne 0 est générée.

    Ce qui laisse penser que PHP effectue une première lecture avant d'interpréter les lignes du script.
    Ce qui éveille du coup ma curiosité sur son fonctionnement ...
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

Discussions similaires

  1. [EasyPHP] EasyPHP installé en local : Taille max de téléchargement de fichier
    Par zakuli dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 7
    Dernier message: 12/06/2012, 19h26
  2. Réponses: 2
    Dernier message: 02/09/2011, 13h59
  3. taille max d'une photo jpg dans un champ blob de mysql
    Par zidenne dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 04/10/2006, 09h42
  4. taille max de nb de caractère dans une ligne de table mysql
    Par zidenne dans le forum Administration
    Réponses: 1
    Dernier message: 01/09/2006, 11h04

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