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)
daza166
źródło
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.

ceejayoz
źródło
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 .

Manson
źródło
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

Farid Blaster
źródło
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
Mel
źródło
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 .

ArticIceJuice
źródło
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.

Sprzedawca podróżujący
źródło
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.

Irfandi D. Vendy
źródło
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('');
        }
    });
});

Marcio Muzzi
źródło
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

Satyanarayana
źródło