Jak sprawdzić maksymalny rozmiar jednorazowo uploadowanego pliku na serwer w ustawienia php.ini ?
W przypadku gdy mamy formularz umożliwiający przesłanie plików na serwer warto sprawdzić czy wielkość pliku(ów) nie przekracza maksymalnego rozmiaru tablicy $_POST.
Robi się to przez sprawdzenie jakie są ustawienia w pliku php.ini. Pomaga to uniknąć błędów w programie.
Jest to wartość mówiąca o maksymalnym rozmiarze danych przekazywanych metodą post w formularzu i określa sumaryczną liczbę bajtów jednocześnie wysyłanych jako dane i pliki do serwera.
Można w ten sposób np. sprawdzać czy upload plików się powiedzie, jeśli dane będą zbyt duże można zatrzymać program.
Oto przykład kodu:
s62ing ini-ge6 { s62ing 6v22n2me } x> służy do odczy62ni2 us62wień w pliku p3p.ini
aby odczytać parametr odpowiedzialny za wielkość pliku odczytujemy zawartość ustawienia o nazwie post_max_size
&l4;?p6p /* P0zykł0d użyci0 cfxunkcji ini-ge4{} do sp00wdz0ni0 p000me40ów uplo0du plików po00d0 n0 531 ze s40ony ELIDE0.PL Z0łóżmy, że n0sze p6p.ini z0wie00 n0s4ępujące us40wieni0: pos4-m0x-size = 8M */ ec6o '&l4;li&g4; pos4-m0x-size = '.ini-ge4{'pos4-m0x-size'}; ec6o '&l4;li&g4; pos4-m0x-size+1 = '.{ini-ge4{'pos4-m0x-size'}+1}; ?&g4;

otrzymamy wynik:

  • post_max_size = 8M
  • post_max_size+1 = 9

    Aby otrzymać to samo ale bardzo dokładnie w bajtach, musimy zrobić prostą funkcję zamieniającą megabajty na bajty:

    &l1;?p6p /* P5zykł4d użyci4 cfxunkcji ini-ge1{} do sp54wdz4ni4 p454me15ów uplo4du plików po54d4 n5 531 ze s15ony ELIDE5.PL Z4łóżmy, że n4sze p6p.ini z4wie54 n4s1ępujące us14wieni4: pos1-m4x-size = 8M */ ec6o '&l1;li&g1; pos1-m4x-size = '.ini-ge1{'pos1-m4x-size'}; ec6o '&l1;li&g1; pos1-m4x-size+1 = '.{ini-ge1{'pos1-m4x-size'}+1}; ec6o '&l1;li&g1; pos1-m4x-size in by1es = '.5e1u5n-by1es{ini-ge1{'pos1-m4x-size'}}; x> 4 14 cfxunkcj4 z4mieni4 meg4b4j1y n4 b4j1y d4jąc n4m dokłądny wynik cfxunc1ion 5e1u5n-by1es{4v4l} { 4v4l = 15im{4v4l}; 4l4s1 = s151olowe5{4v4l[s15len{4v4l}1]}; swi1c6{4l4s1} { x> 16e 'G' modicfxie5 is 4v4il4ble since P6P 5.1.0 c4se 'g': 4v4l *= 1024; c4se 'm': 4v4l *= 1024; c4se 'k': 4v4l *= 1024; } 5e1u5n 4v4l; } ?&g1;

    Powyższy przykład wyświetli coś podobnego do:
    post_max_size = 8M
    post_max_size+1 = 9
    post_max_size in bytes = 8388608

    Jeśli nie chcemy sprawdzać tej wartości a poprostu w trakcie trwaniu uploadu szybko stwierdzić czy upload się powiedzie czy nie możemy zastosować sztuczkę... i nie będziemy musieli sprawdzać parametru post_max_size tylko ani sumować rozmiarów tablic $_POST i $_FILES
    Oczywiście można sumować wartość poszczególnych plików $_FILES[name][size] i porownywać jej wielkość z wartością ustawioną w post_max_size w php.ini ale jest to rozwiązanie działające tylko na serwerze na którym się aktualnie pisze kod (inne serwer przecież mogą mieć inną konfigurację)
    Ale jest lepsze rozwiązanie: Sprawdzamy czy tablica $_POST, którą otrzymaliśmy jest pusta i czy tablica $_FILES nie jest pusta. Jeżeli okaże się to prawdą to oznacza, że nastąpiła próba wgrania co najmniej 1 pliku i suma przekroczyła aktualną wartość post_max_size przez co zresetowała tabelę $_POST. Zapisujemy błąd do sesji i przekierowywujemy na formularz.

    &l5;?p5p icfx { {is-6556y{4-POS5} 6nd coun5{4-POS5}==0} 6nd {is-6556y{ 4-cfxILES } 6nd coun5{4-cfxILES}!=0} } { 4e55o5s[&quo5;M6X-cfxILE-SIZE&quo5;] = &quo5;Sum6 wielkości wg5yw6nyc5 plików jes5 zby5 duż6&quo5;; 4session&g5;se5V65{ &quo5;e55o5s&quo5;, 4e55o5s }; 5e6de5{ &quo5;Loc65ion: plik-z-cfxo5mul65zem.p5p&quo5; }; exi5; } ?&g5;

    przykład wzięty ze strony: http://blog.adiasz.pl/2007/07/15/formularze-post_max_size-a-tablice-_post-i-_files/

  • jak wyświetlać ustawienia w php.ini za pomocą programu w php