POST Content-Length überschreitet das Limit


94

Ich erhalte ähnliche Fehler in meinem error_log in PHP, wenn Benutzer ihre Dateien hochladen

PHP-Warnung: Die POST-Inhaltslänge von 11933650 Byte überschreitet die Grenze von 8388608 Byte in Unbekannt in Zeile 0

Würde dies in meiner php.ini (erstellte benutzerdefinierte INI-Datei in public_html) dieses Problem lösen. Wie viel müsste ich auf ungefähr 1 GB einstellen? Ich werde meine Einstellungen in der php.ini ändern. Wird das Problem dadurch gelöst?

upload_max_filesize = 1000M ;1GB
post_max_size = 1000M

Auf was würde ich das Limit 'memory_limit' setzen?

Wäre dies auch in meinem Skript korrekt, um zu überprüfen, ob die Größe der hochgeladenen Datei <1 GB ist

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

5
Sind Sie sicher, dass Sie die richtige php.ini bearbeiten?
Pekka

Bearbeiten Sie die richtige php.ini (es gibt mehrere)? Setzt etwas anderes die Einstellungen zurück? (zB irgendwelche Anrufe an php_ini_set?)
Piskvor verließ das Gebäude am

Ich habe eine benutzerdefinierte php.ini-Datei in public_html erstellt
daza166

@daza: Sie können eine php.ini nicht einfach an einer beliebigen Stelle ablegen. PHP überprüft nur bestimmte Speicherorte, und "aktuelles Verzeichnis" gehört nicht dazu. Sie können die Anweisungen 'php_value' in Ihrer httpd.conf und / oder einer .htaccess-Datei verwenden, um sie in einem bestimmten Verzeichnis festzulegen. Andernfalls müssen Sie es in der INI-Hauptdatei ändern. Verwenden php_info()Sie diese Option, um zu sehen, wie Ihre "lokalen" Einstellungen lauten und welche INI-Dateien verwendet werden.
Marc B

1
Erstellen <?php phpinfo(); ?>Sie eine info.php mit kopieren Sie sie in public_html und rufen Sie sie in Ihrem Browser auf. Überprüfen Sie dann, ob upload_max_filesize den richtigen Wert hat.
DanielB

Antworten:


96

8388608 Bytes sind 8 MB, das Standardlimit in PHP. Diese Änderungen an php.ini sollten das Problem tatsächlich lösen (stellen Sie sicher, dass Sie Ihren Apache-Server neu starten, nachdem Sie sie vorgenommen haben).

Das Speicherlimit sollte hier nicht geändert werden müssen.


Stellen Sie sicher, dass Sie Ihren Server neu starten, nachdem Sie die Änderungen in der INI-Datei vorgenommen haben.
Sandhu

Wenn Sie nginx + php fpm verwenden, stellen Sie sicher, dass Sie den php-Daemonsudo service php5-fpm restart
Gourneau

Der Neustart hat es für mich getan. +1 Danke;)
Refilon

1
Lassen Sie mich meine Erfahrung nur hier posten, der Neustart eine gab mir stop: Unknown instance:, es wurde gerade eine neue php5-fpm Instanz aber mein Webserver wurde noch die alten mit, musste ich dann tut sudo killall -KILL php5-fpmdannsudo service php5-fpm start
Memes

Abhängig davon, was im PHP-Prozess, der den Upload abwickelt, noch ausgeführt wird, muss möglicherweise memory_limitein Betrag erhöht werden , der größer als die gewünschte maximale Upload-Größe ist.
Craig Finch

45

Ich schlage vor, dass Sie post_max_sizein der php.iniDatei von 8M auf 32M wechseln .


39

Sie setzen nur auf php.ini

dann setzen Sie:

upload_max_filesize = 1000M;
post_max_size = 1000M;

Starten Sie dann Ihre xampp neu. Überprüfen Sie das Bild


17

Versuchen Sie, dies in .htaccess einzufügen, und es sollte funktionieren.

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 sollte etwas größer sein als upload_max_filesize , da der Text beim Hochladen mit der HTTP-POST-Methode auch Überschriften mit Dateigröße und -name usw. enthält.

Wenn Sie 1GiB-Dateien erfolgreich hochladen möchten, müssen Sie Folgendes festlegen:

upload_max_filesize = 1024M
post_max_size = 1025M

Beachten Sie, dass das korrekte Suffix für GB G ist, dh upload_max_filesize = 1G.

Memory_limit muss nicht festgelegt werden .


6

In einigen Fällen müssen Sie die maximale Ausführungszeit erhöhen.

max_execution_time=30

ich habe es gemacht

max_execution_time=600000

dann war ich glücklich.


7
Oft möchten Sie dies möglicherweise nicht in der php.ini tun, da dadurch ALLE PHP-Prozesse für diese Zeit ausgeführt werden können. Sie können es in einer einzelnen Datei mit set_time_limit () festlegen, z. B. set_time_limit (600000)
billrichards

5

Möglicherweise gibt es mehr als nur eine php.ini- Datei. Wenn Sie beispielsweise WAMP verwenden, befinden sich 2 php.ini- Dateien in folgenden Verzeichnissen:

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

Sie müssen den ersten bearbeiten.


4

Ich bin anderer Meinung, aber diese Lösung zum Erhöhen der Dateigröße in php.ini oder .htaccess funktioniert nicht, wenn der Benutzer eine Datei sendet, die größer ist als in der Serveranwendung zulässig. Ich schlage vor, dies im Frontend zu validieren. Beispiel:

$(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
Nicht einverstanden mit was?
Rob

1
Es ist in Ordnung, die Clientseite zu validieren, aber es tut nichts für die Sicherheit, nur um den Benutzer sofort zu warnen, wenn er eine große Datei hochlädt. Das ganze Ziel hier ist nicht, Benutzer davon abzuhalten, eine große Datei hochzuladen, sondern ihnen zu ermöglichen, eine große Datei hochzuladen.
Altimus Prime

1
Gibt es keine serverseitige Lösung / Prüfung dafür? Ich kann einen JS-Check leicht umgehen.
Akinuri

Nvm, fand es heraus:if ($_SERVER["CONTENT_LENGTH"] > (int)(str_replace("M", "", ini_get("post_max_size")) * 1024 * 1024)) { // do w/e
Akinuri

2

Wenn Sie Php 5.6.X-Versionen in Windows mit Wamp verwenden, befindet sich der Dateispeicherort möglicherweise in:

C:\Windows\php.ini

Versuche es einfach mit

post_max_size = 100M;

Versuchen Sie, Änderungen in Apache 1 vorzunehmen. Dadurch lädt Ihre Wamp / XAMP INI-Datei

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.