web-dev-qa-db-fra.com

PHP post_max_size annule upload_max_filesize

Dans mon site hébergeur, j'ai vu (via phpinfo) que

  • post_max_size = 8Mb
  • upload_max_filesize = 16Mb

Cela m'a amené à penser que je devrais être capable de télécharger un fichier d'une taille maximale de 16 Mo. Cependant, lorsque je le fais via une méthode post (comme d'habitude), post_max_size prend le relais et déclare que j'en ai envoyé trop.

Quelle est la méthode permettant d’envoyer un fichier de 16 Mo? GET - PUT - autre?

J'espère que quelqu'un pourra clarifier cela pour moi.

Simon

42
Simon

upload_max_filesize est la limite d'un fichier unique. post_max_size est la limite du corps entier de la demande, qui peut inclure plusieurs fichiers.

Donné post_max_size = 20M et upload_max_filesize = 6M vous pouvez télécharger jusqu'à 3 fichiers de 6M chacun. Si au lieu post_max_size = 6M et upload_max_filesize = 20M, vous ne pouvez télécharger qu'un seul fichier de 6M avant de cliquer sur post_max_size. Cela n'aide pas d'avoir upload_max_size> post_max_size.

Ce n'est pas évident de savoir comment reconnaître le dépassement post_max_size. $_POST et $_FILES sera vide, mais $_SERVER['CONTENT_LENGTH'] sera> 0. Si le client n'a simplement chargé aucune variable de publication ni aucun fichier, alors $_SERVER['CONTENT_LENGTH'] sera 0.

80
Matthew

Par POST sont effectués (généralement, il existe d'autres méthodes). Recherchez l'attribut method du formulaire contenant le champ de téléchargement de fichier;)

La limite la plus basse de tout paramètre associé remplace un paramètre supérieur:

Voir Gestion des téléchargements de fichiers: Pitfals communs qui explique cela en détail et comment calculer les valeurs.

19
hakre

La méthode normale pour envoyer un fichier téléchargé est POST, donc aussi post_max_size devrait être de 16 Mo ou plus.

Incidemment, aussi memory_limit joue un rôle. Il devrait être supérieur à 16 Mo, mais comme la valeur par défaut est 128 Mo, vous ne verrez pas ce problème. Exemple php.ini configuration:

post_max_size = 16M
upload_max_filesize = 16M
memory_limit = 128M

Modifiez ces valeurs en php.ini si vous y avez accès, sinon vous pouvez essayer de les changer dans un .htaccess fichier.

php_value upload_max_filesize 16M
php_value post_max_size 16M 

Cela ne fonctionnera que si les paramètres AllowOverride le permettent. Sinon, vous devez demander à votre hébergeur.

12
stivlo

Les paramètres de configuration de votre serveur permettent aux utilisateurs de télécharger des fichiers jusqu’à 16 Mo (car vous avez défini pload_max_filesize = 16 Mo), mais le post_max_size accepte uniquement les données de publication jusqu’à 8 Mo. C'est pourquoi il génère une erreur.

Cité tiré du official PHP site) :

  1. Pour télécharger des fichiers volumineux, la valeur post_max_size doit être supérieure à upload_max_filesize.

  2. memory_limit devrait être plus grand que post_max_size

Vous devez toujours définir votre valeur post_max_size supérieure à la valeur upload_max_filesize.

6
Sai Kiran Sripada

post_max_size:

  • Définit la taille maximale autorisée des données de publication. Ce paramètre affecte également le téléchargement de fichier.
  • Pour télécharger des fichiers volumineux, cette valeur doit être supérieure à upload_max_filesize.
  • D'une manière générale, memory_limit devrait être plus grand que post_max_size.
  • PHP par défaut: 8M

pload_max_filesize:

  • La taille maximale d'un fichier téléchargé
  • PHP par défaut: 2M

memory_limit> post_max_size> upload_max_filesize

Par défaut PHP: 128M> 8M> 2M

Par défaut, post_max_size devrait être 4 fois plus grand que upload_max_filesize.
À son tour, memory_limit devrait être 16 fois plus grand que post_max_size

6
Nishanth ॐ

changement dans php.ini max_input_vars 1000

3
user7224508