2014-05-15 12 views
11

Podczas próby przesłania pliku PDF, który miał 15 MB, przez utworzony do tego obszar administracyjny, nic się nie stało. Komunikat o błędzie nie powiodło się, ale PDF nie został przesłany.PHP post_max_size vs upload_max_filesize, jaka jest różnica?

Wtedy pomyślałem, że może to być problem z ustawieniami php.ini. Rzeczywiście, kiedy spojrzałem na plik, stwierdziłem, że limity zostały ustawione na 8m. Zakładam, że to 8mb.

post_max_size:http://php.net/post-max-size

; Maximum size of POST data that PHP will accept. 
; Its value may be 0 to disable the limit. It is ignored if POST data reading 
; is disabled through enable_post_data_reading. 
post_max_size = 20M 

upload_max_filesize:http://php.net/upload-max-filesize

; Maximum allowed size for uploaded files. 
upload_max_filesize = 20M 

Patrząc na komentarze, wydaje się, że ktoś jest za to, że przesłane pliki, a drugi odnosi się bezpośrednio do POST dane. Zastanawiam się nad tym scenariuszem: Jeśli masz formularz, który jest POST "obraz do innej strony, co to się liczy jako, upload_max_filesize lub post_max_size? Czy wchodzi w obie opcje? Czy ma się pierwszeństwo? Czy są przypadki, w których można by użyć jednego, a nie drugiego?

Edit:

Więc jeśli mam formularz, który ma 3 wejścia pliku, wszystkie pozwalającą plików 20MB lub mniejszy, ustawienia będą musiały być ustawione tak:

upload_max_filesize = 20M 
post_max_size = 60M 

Odpowiedz

17

Masz rację. post_max_size to maksymalny rozmiar wszystkich danych podstawowych POST. Nie ma znaczenia, czy robisz POSTing JSON, czy kolekcję DVD, to wszystko dane POST. Przesyłanie plików liczy się w tym limicie. Należy również pamiętać, że jeśli przesyłasz wiele plików, całkowity rozmiar pliku musi mieścić się w tym limicie.

upload_max_filesize to maksymalny rozmiar tylko dla plików z POSTed. Inne rodzaje danych treści POST nie podlegają temu ograniczeniu.

Mówiąc krótko, jeśli chcesz przesłać duże pliki, musisz zwiększyć oba limity.

+0

Twój serwer może również mieć limit. Apache ma dyrektywę [LimitRequestBody] (http://httpd.apache.org/docs/2.2/mod/core.html#limitrequestbody), którą można ustawić. Jeśli jest obecny, musi być równy lub większy niż "post_max_size" –

+1

Z tego co rozumiem, jeśli mam formularz, który ma 3 przesłane z kodami przy 20 MB, byłoby dobrze mieć 'upload_max_filesize = 20M', ale' post_max_size' ustawić na "60M"? –

+0

@TonyM Tak, zgadza się. – Brad

4

post_max_size jest podobnie jak nadzbiór. upload_max_filesize jest w kontekście przesyłania plików, ale post_max_size jest sprawdzany pod kątem wszystkich rodzajów danych POST. Może to być bardzo duża treść, którą można opublikować, a która jest ograniczona post_max_size. W przypadku dużego pliku, który chcesz przesłać, musisz zmienić oba ograniczenia.

+0

Z dokumentów dla 'post_max_size': *' "Ustawia maksymalny rozmiar danych pocztowych dozwolonych.To ustawienie wpływa również na przesyłanie plików.Aby przesłać duże pliki, ta wartość musi być większa niż upload_max_filesize." * * – Sam

+0

@Sam Myślę, że że Neo starał się zwrócić uwagę na to, że rozmiar post_max_size musi zawierać wszystkie pliki, ale powinien być większy (niż suma wszystkich przesłanych plików), ponieważ może zawierać znacznie więcej (parametry, ograniczniki MIME, itp.). – Alex

Powiązane problemy