POST Content-Length przekracza limit


95

Otrzymuję podobne błędy w moim error_log w php, gdy użytkownicy przesyłają swoje pliki

Ostrzeżenie PHP: Długość zawartości POST 11933650 bajtów przekracza limit 8388608 bajtów w polu Nieznane w wierszu 0

Czy w moim php.ini (utworzonym niestandardowym pliku ini w public_html) rozwiązałoby to ten problem, ile musiałbym ustawić go na około 1 GB? Zamierzam zmienić moje ustawienia na to w php.ini, czy to rozwiąże problem?

upload_max_filesize = 1000M ;1GB
post_max_size = 1000M

Na co powinienem ustawić limit „memory_limit”.

Czy byłoby to również poprawne w moim skrypcie sprawdzającym, czy przesyłany plik ma rozmiar <1 GB

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

5
Czy na pewno edytujesz poprawny plik php.ini?
Pekka

Czy edytujesz poprawny plik php.ini (jest ich kilka)? Czy coś innego resetuje ustawienia? (np. jakieś telefony do php_ini_set?)
Piskvor opuścił budynek

Utworzyłem niestandardowy plik php.ini w public_html
daza166

@daza: nie możesz po prostu upuścić php.ini gdziekolwiek chcesz. PHP sprawdza tylko określone lokalizacje, a "bieżący katalog" nie jest jednym z nich. Możesz użyć dyrektyw „php_value” w swoim httpd.conf i / lub pliku .htaccess, aby ustawić je w określonym katalogu. Ale w przeciwnym razie będziesz musiał to zmienić w głównym pliku .ini. Użyj, php_info()aby zobaczyć, jakie są twoje „lokalne” ustawienia i które pliki .ini są używane.
Marc B

1
stwórz plik info.php, <?php phpinfo(); ?>skopiuj go do public_html i wywołaj w przeglądarce. Następnie sprawdź, czy upload_max_filesize ma odpowiednią wartość.
DanielB,

Odpowiedzi:


97

8388608 bajtów to 8 MB, domyślny limit w PHP. Te zmiany w php.ini powinny rzeczywiście rozwiązać problem (upewnij się, że uruchomiłeś ponownie serwer Apache po ich wprowadzeniu).

Nie trzeba tu zmieniać limitu pamięci.


Upewnij się, że zrestartowałeś serwer po wprowadzeniu zmian w pliku .ini.
Sandhu

Jeśli używasz nginx + php fpm, pamiętaj o ponownym uruchomieniu demona php sudo service php5-fpm restart
Gourneau

Restart zrobił to za mnie. +1 Dzięki;)
Refilon

1
Niech mi tylko pisać tutaj moje doświadczenie, restart dał mi stop: Unknown instance:, to było po prostu tworzenia nowej instancji PHP5-FPM ale mój serwer WWW był wciąż przy starej, potem musiałem zrobić sudo killall -KILL php5-fpmpotemsudo service php5-fpm start
memy

W zależności od tego, co jeszcze jest wykonywane w procesie PHP, który obsługuje przesyłanie, może być konieczne zwiększenie memory_limitdo wielkości większej niż pożądany maksymalny rozmiar wysyłania.
Craig Finch

45

Proponuję zmienić post_max_sizew php.inipliku z 8M na 32M .


39

po prostu ustawiasz na php.ini

następnie ustaw:

upload_max_filesize = 1000M;
post_max_size = 1000M;

następnie uruchom ponownie Xampp .. Sprawdź obraz


17

Spróbuj wkleić to do .htaccess i powinno działać.

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 powinien być nieco większy niż upload_max_filesize , ponieważ przy przesyłaniu metodą HTTP POST tekst zawiera również nagłówki z rozmiarem i nazwą pliku itp.

Jeśli chcesz pomyślnie załadować pliki 1GiB, musisz ustawić:

upload_max_filesize = 1024M
post_max_size = 1025M

Uwaga, poprawny przyrostek dla GB to G, tj. Upload_max_filesize = 1G.

Nie ma potrzeby ustawiania memory_limit .


6

W niektórych przypadkach musisz zwiększyć maksymalny czas wykonania.

max_execution_time=30

ja to zrobiłem

max_execution_time=600000

wtedy byłem szczęśliwy.


7
często możesz nie chcieć tego robić w php.ini, ponieważ pozwoliłoby to WSZYSTKIM procesom php działać przez ten czas. Możesz ustawić to w jednym pliku za pomocą set_time_limit () np. Set_time_limit (600000)
billrichards

5

Może istnieć więcej niż jeden plik php.ini . Na przykład podczas korzystania z WAMP istnieją 2 pliki php.ini w następujących katalogach:

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

Musisz edytować pierwszy.


4

Nie zgadzam się, ale to rozwiązanie zwiększające rozmiar pliku w php.ini lub .htaccess nie zadziała, jeśli użytkownik wyśle ​​plik większy niż dozwolony w aplikacji serwera. Sugeruję sprawdzenie tego w interfejsie użytkownika. Przykład:

$(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
Nie zgadzasz się z czym?
Rob

1
Sprawdzanie poprawności po stronie klienta jest w porządku, ale nie robi to nic dla bezpieczeństwa, a jedynie daje natychmiastowe ostrzeżenie, jeśli przesyłają duży plik. Głównym celem nie jest powstrzymanie użytkowników przed przesyłaniem dużego pliku, ale umożliwienie im przesłania dużego pliku.
Altimus Prime,

1
Czy nie ma rozwiązania / sprawdzenia po stronie serwera? Mogę łatwo ominąć kontrolę JS.
akinuri

Nvm, rozgryzłem to:if ($_SERVER["CONTENT_LENGTH"] > (int)(str_replace("M", "", ini_get("post_max_size")) * 1024 * 1024)) { // do w/e
akinuri

2

Jeśli używasz wersji Php 5.6.X w systemie Windows używającym Wampa, lokalizacja pliku może znajdować się w,

C:\Windows\php.ini

Po prostu spróbuj

post_max_size = 100M;

Spróbuj wprowadzić zmiany w Apache One. W ten sposób twój Wamp / XAMP ładuje plik .ini

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.