POST Content-Length dépasse la limite


94

J'obtiens des erreurs similaires dans mon error_log en php lorsque les utilisateurs téléchargent leurs fichiers

Avertissement PHP: POST Content-Length de 11933650 octets dépasse la limite de 8388608 octets en inconnu sur la ligne 0

Dans mon php.ini (fichier ini personnalisé créé dans public_html) est-ce que cela résoudrait ce problème, combien devrais-je le définir à environ 1 Go? Je vais modifier mes paramètres pour cela dans php.ini, est-ce que cela résoudra le problème?

upload_max_filesize = 1000M ;1GB
post_max_size = 1000M

À quoi définirais-je la limite 'memory_limit'.

Ce serait également correct dans mon script pour vérifier que la taille du fichier téléchargé est <1 Go

if($_FILES["uploadedfile"]["size"]<1000000)

5
Êtes-vous sûr que vous modifiez le bon php.ini?
Pekka

Éditez-vous le bon php.ini (il y en a plusieurs)? Quelque chose d'autre réinitialise-t-il les paramètres? (par exemple, des appels à php_ini_set?)
Piskvor a quitté le bâtiment le

J'ai créé un fichier php.ini personnalisé dans public_html
daza166

@daza: vous ne pouvez pas simplement déposer un php.ini où vous le souhaitez. PHP ne vérifie que certains emplacements, et le "répertoire courant" n'en fait pas partie. Vous pouvez utiliser les directives 'php_value' dans votre httpd.conf et / ou un fichier .htaccess à définir dans un répertoire particulier. Mais sinon, vous devrez le changer dans le fichier principal .ini. Utilisez php_info()pour voir quels sont vos paramètres «locaux» et quels fichiers .ini sont utilisés.
Marc B

1
créez un info.php en le copiant <?php phpinfo(); ?>dans public_html et appelez-le dans votre navigateur. Vérifiez ensuite si upload_max_filesize a la bonne valeur.
DanielB

Réponses:


96

8388608 octets équivaut à 8 Mo, la limite par défaut en PHP. Ces modifications de php.ini devraient en effet résoudre le problème (assurez-vous de redémarrer votre serveur Apache après les avoir effectuées).

La limite de mémoire ne devrait pas avoir besoin d'être modifiée ici.


Assurez-vous de redémarrer votre serveur après avoir effectué les modifications dans le fichier .ini.
Sandhu

Si vous utilisez nginx + php fpm, assurez-vous de redémarrer le démon php sudo service php5-fpm restart
Gourneau

Le redémarrage l'a fait pour moi. +1 Merci;)
Refilon

1
Permettez - moi de poster ici mon expérience, le redémarrage m'a donné stop: Unknown instance:, il vient de créer une nouvelle instance php5-FPM , mais mon serveur web utilisait encore l'ancien, je devais alors faire sudo killall -KILL php5-fpmalorssudo service php5-fpm start
Memes

En fonction de ce qui est fait d'autre dans le processus PHP qui gère le téléchargement, il peut être nécessaire d'augmenter memory_limità un montant supérieur à la taille de téléchargement maximale souhaitée.
Craig Finch le

45

Je suggère que vous deviez passer post_max_sizede 8M à 32M dans le php.inifichier.


39

vous venez de définir sur php.ini

puis réglez:

upload_max_filesize = 1000M;
post_max_size = 1000M;

puis redémarrez votre xampp .. Vérifiez l'image


17

Essayez de coller ceci dans .htaccess et cela devrait fonctionner.

php_value post_max_size 2000M
php_value upload_max_filesize 2500M
php_value max_execution_time 6000000
php_value max_input_time 6000000
php_value memory_limit 2500M

10

post_max_size doit être légèrement plus grand que upload_max_filesize , car lors du téléchargement à l'aide de la méthode HTTP POST, le texte comprend également des en-têtes avec la taille et le nom du fichier, etc.

Si vous souhaitez télécharger avec succès les fichiers 1GiB, vous devez définir:

upload_max_filesize = 1024M
post_max_size = 1025M

Notez que le suffixe correct pour GB est G, c'est-à-dire upload_max_filesize = 1G.

Pas besoin de définir memory_limit .


6

Dans certains cas, vous devez augmenter la durée d'exécution maximale.

max_execution_time=30

je l'ai fait

max_execution_time=600000

alors j'étais heureux.


7
souvent, vous ne voudrez peut-être pas faire cela dans php.ini car cela permettrait à TOUS les processus php de s'exécuter pendant ce laps de temps. Vous pouvez le définir dans un seul fichier avec set_time_limit () par exemple set_time_limit (600000)
billrichards

5

Il peut y avoir plusieurs fichiers php.ini . Par exemple, lors de l'utilisation de WAMP, il y a 2 fichiers php.ini dans les répertoires suivants:

  • C:\wamp\bin\apache\apache2.4.9\bin
  • C:\wamp\bin\php\php5.5.12

Vous devez éditer le premier.


4

Je ne suis pas d'accord, mais cette solution pour augmenter la taille du fichier dans php.ini ou .htaccess ne fonctionnera pas si l'utilisateur envoie un fichier plus volumineux que celui autorisé dans l'application serveur. Je suggère de valider cela sur le frontend. Exemple:

$(document).ready(function() {
    $ ('#your_input_file_id').bind('change', function() {
        var fileSize = this.files[0].size/1024/1024;
        if (fileSize > 2) { // 2M
            alert('Your custom message for max file size exceeded');
            $('#your_input_file_id').val('');
        }
    });
});


2
Pas d'accord avec quoi?
Rob

1
C'est bien de valider côté client, mais cela ne fait rien pour la sécurité, seulement pour donner à l'utilisateur un avertissement immédiat s'il télécharge un gros fichier. L'objectif ici n'est pas d'empêcher les utilisateurs de télécharger un fichier volumineux, c'est de leur permettre de télécharger un fichier volumineux.
Altimus Prime

1
N'y a-t-il pas de solution / vérification côté serveur à cela? Je peux facilement contourner une vérification JS.
akinuri

NVM, l'a compris:if ($_SERVER["CONTENT_LENGTH"] > (int)(str_replace("M", "", ini_get("post_max_size")) * 1024 * 1024)) { // do w/e
akinuri

2

Si vous utilisez les versions Php 5.6.X dans Windows en utilisant Wamp, l'emplacement du fichier peut être dans,

C:\Windows\php.ini

Essayez juste avec

post_max_size = 100M;

Essayez de faire des changements dans Apache One. Par cela, votre fichier .ini de chargement Wamp / XAMP

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.