2011-10-13 14 views
34

W moim hosta miejscu, widziałem (poprzez phpinfo), którePHP post_max_size nadpisuje upload_max_filesize

  • post_max_size = 8Mb
  • upload_max_filesize = 16Mb

To doprowadziło mnie do myślenia, że ​​powinienem być w stanie przesłać jako plik tak duży jak 16 MB. Jednak gdy robię to za pomocą metody post (jak zwykle), post_max_size przejmuje i deklaruje, że wysłałem za dużo.

Jaka jest metoda, która pozwala na przesłanie pliku tak dużego jak 16 MB? GET - PUT - inne?

Mam nadzieję, że ktoś może to dla mnie wyjaśnić.

Simon

Odpowiedz

9

normalny sposób wysłać upload plików jest POST, a tym samym również post_max_size powinna wynosić 16 MB lub więcej.

Nawiasem mówiąc, również memory_limit gra rolę. Powinien być większy niż 16 MB, ale ponieważ domyślna wartość to 128 Mb, nie zobaczysz tego problemu. Przykład php.ini konfiguracja:

post_max_size = 16M 
upload_max_filesize = 16M 
memory_limit = 128M 

zmienić te wartości w php.ini jeśli masz do niego dostęp, w przeciwnym razie można spróbować zmienić je w pliku .htaccess.

php_value upload_max_filesize 16M 
php_value post_max_size 16M 

Będzie to działać tylko wtedy, gdy ustawienia na to zezwalają na AllowOverride. W przeciwnym razie musisz zwrócić się do swojej firmy hostingowej.

66

upload_max_filesize to limit każdego pojedynczego pliku. post_max_size to limit całego zgłoszenia, który może zawierać wiele plików.

Biorąc pod uwagę post_max_size = 20M i upload_max_filesize = 6M można przesłać do 3 plików po 6M każdy. Jeśli zamiast tego post_max_size = 6M i upload_max_filesize = 20M, możesz przesłać tylko jeden plik 6M przed naciśnięciem post_max_size. Nie pomaga mieć upload_max_size>post_max_size.

Nie jest oczywiste, jak rozpoznać, przechodząc na post_max_size. $_POST i $_FILES będą puste, ale $_SERVER['CONTENT_LENGTH'] będzie> 0.Jeśli klient po prostu nie przesyłać żadnych zmiennych POST lub pliki, a następnie $_SERVER['CONTENT_LENGTH'] będzie 0.

5

ustawieniach konfiguracyjnych serwera pozwala użytkownikom przesyłać pliki zapisu do 16MB (bo masz ustawiony upload_max_filesize = 16MB), ale post_max_size akceptuje danych post tylko do 8 MB. Właśnie dlatego powoduje błąd.

Cytat z official PHP site:

  1. Aby przesłać duże pliki, wartość post_max_size musi być większa niż upload_max_filesize.

  2. memory_limit powinny być większe niż post_max_size

Zawsze należy ustawić wartość post_max_size większą niż wartość upload_max_filesize.

Powiązane problemy