# post_max_size ja upload_max_filesize mõistlik piiramine

> post_max_size ja upload_max_filesize piiramine: koostoime veebiserveri piiridega, php.net'i üleminekuväärtused PHP2Shelli puhul ja tüüpilised veapildid.

Allikas: https://phpsos.de/et/blog/post-max-size-upload-limits/  
Seis: 25.10.2026  
Pakkuja: PHP SOS, PHP hädaabi ja serveri turvalisus. Kohene abi WhatsAppis: https://wa.me/491736494914?text=Tere%2C%20PHP%20SOS%2C%20vajame%20abi%20oma%20PHP-serveriga.%20Ettev%C3%B5te%3A%20%E2%80%A6%20Veebisait%3A%20%E2%80%A6

**Lühidalt:** `post_max_size` piirab POST-päringu kogusuurust, `upload_max_filesize` üksikut faili; PHP käsiraamatu järgi on vaikeväärtused 8M ja 2M. Väärtused peavad sobima veebiserveri ja rakenduse piiridega, muidu ebaõnnestuvad üleslaadimised ilma selge teateta. Kuni PHP2Shelli uuenduseni soovitab php.net `post_max_size = 8M` ilma üleslaadimisteta või `32M` üleslaadimistega, `upload_max_filesize` sellest allpool, seatuna nii, et rakendused seda üle ei kirjuta.

## Kui kandideerimisvorm äkki vaikib

Pärast PHP2Shelli üleminekumeetmeid on paljud administraatorid `post_max_size` väärtust langetanud. Mõne päeva pärast teatab personaliosakond, et kandidaatide avaldused enam kohale ei jõua. Vorm laeb lihtsalt uuesti, veateadet ei tule. Põhjus: päring kolme PDF-manusega oli uuest piirist suurem ja PHP loobus vormiandmetest.

Näide näitab põhiprobleemi. Üleslaadimispiirid mõjuvad mitmes kohas korraga ja iga koht reageerib ületamisele erinevalt. Kes tunneb ahelat, saab väärtused seada nii, et need kaitsevad, tööd segamata. Kuidas PHP üleslaadimisi seespidiselt töötleb, selgitab [Kuidas PHP failide üleslaadimisi töötleb](https://phpsos.de/et/php/datei-uploads-intern/); üleslaadimisfunktsioonide turvalist programmeerimist kirjeldab [Failide üleslaadimise turvaline teostus PHP-s](https://phpsos.de/et/ratgeber/datei-upload-sicher/).

## Üleslaadimispiiride ahel

Päring läbib mitu piiri, enne kui rakendus seda näeb. Järgmised andmed pärinevad Nginxi, Apache'i ja PHP dokumentatsioonist:

| Koht | Säte | Vaikeväärtus dokumentatsiooni järgi | Ületamisel |
|---|---|---|---|
| Nginx | `client_max_body_size` | 1m | viga 413 brauserile |
| Apache alates 2.4.54 | `LimitRequestBody` | 1 GiB (kuni 2.4.53: piiramatu) | veavastus töötlemise asemel |
| PHP | `post_max_size` | 8M | `$_POST` ja `$_FILES` tühjad |
| PHP | `upload_max_filesize` | 2M | fail lükatakse tagasi veakoodiga |
| PHP | `max_file_uploads` | 20 | ülejäänud failid ignoreeritakse |
| PHP | `max_input_vars` | 1000 | ülejäänud vormiväljad puuduvad |

Sellest tuleneb lihtne reegel: `upload_max_filesize` väiksem kui `post_max_size`, `post_max_size` väiksem kui veebiserveri piir. PHP käsiraamat soovitab lisaks, et `memory_limit` oleks üldiselt suurem kui `post_max_size`. PHP2Shelli üleminekumeetme `memory_limit=-1` ajal täidab selle rolli piir konteineri või cgroup'i kaudu; rohkem artiklis [memory_limit õige seadistamine](https://phpsos.de/et/blog/memory-limit-richtig-setzen/).

## post_max_size pärast PHP2Shelli: mida php.net soovitab

21.10.2026 turvateates nimetab php.net uuenduseta serverite jaoks üleminekumeetmena madalaid päringupiire. Need vähendavad üksikute ründeteede riski, kuid ei ole sõnaselgelt täielik kaitse:

1. **Ilma failide üleslaadimiseta:** `post_max_size = 8M`.
2. **Failide üleslaadimisega:** `post_max_size = 32M`.
3. **Mõlemal juhul:** hoidke `upload_max_filesize` väärtusest `post_max_size` allpool.
4. **Lisaks kaaluge:** piire veebiserveris või proxys dekodeeritud päringu suurusele, sisendväljade arvule, multipart-osade arvule, päiserea arvule ja pesastussügavusele. php.net'i järgi peavad need piirid hõlmama ka päringuid, millel puudub kasutatav `Content-Length`-väärtus.

Väärtused kuuluvad sinna, kus rakendused neid üle kirjutada ei saa. Kuna `post_max_size` ja `upload_max_filesize` on käsiraamatu järgi kataloogitasandil muudetavad, võiks `.user.ini` või mod_php puhul `.htaccess` need muidu uuesti tõsta:

```ini
; Veebisaidi FPM-pool, üleslaadimistega (üleminek uuenduseni)
php_admin_value[post_max_size] = 32M
php_admin_value[upload_max_filesize] = 24M
php_admin_value[max_file_uploads] = 5
```

Veebiserveris tõmmake piir napilt kõrgemale, et liiga suured päringud PHP-ni üldse ei jõuaks:

```nginx
# Nginx, server- või location-plokis
client_max_body_size 32m;
```

```apache
# Apache, VirtualHostis: 32 MiB baitides
LimitRequestBody 33554432
```

Seejärel laadige kõik PHP töölised ja veebiserver uuesti. Kõigi üleminekumeetmete ülevaade on lehel [Kiirmeetmed, kui te ei saa veel paikama hakata](https://phpsos.de/et/php2shell/sofortmassnahmen-ohne-patch/). Kas ja kuidas saab üleslaadimispäringuid lisaks proxys filtreerida, selgitab [Üleslaadimispäringute filtreerimine serveri serval](https://phpsos.de/et/blog/upload-anfragen-am-rand-filtern/).

> **Oluline:**
> Testige pärast iga muudatust vorme suurimate legitiimsete päringutega: mitme manusega avaldused, tooteimpordid, pildigaleriid. Liiga napp väärtus halvab äriprotsessid, ilma et keegi veateadet näeks.

## Õige väärtuse väljaselgitamine teie veebisaidi jaoks

Üldiste väärtuste asemel tasub teha lühike inventuur. Loetlege kõik üleslaadimistega vormid ning märkige suurim legitiimne fail ja samaaegsete failide suurim arv. Sellest tuleneb vajadus: `upload_max_filesize` katab suurima üksikfaili, `post_max_size` ühe päringu kõigi failide summa pluss veidi varu vormiväljadele.

Kui vajadus on üle 32M, ei sobi see php.net'i üleminekusoovitusega. Siis on see veel üks põhjus uuendus ette tuua. Suuri üleslaadimisi saab teostada ka eraldi alamdomeeni kaudu oma poolis, et ülejäänud veebisait säilitaks kitsad piirid.

Pärast uuendust versioonile 8.5.12, 8.4.27, 8.3.36, 8.2.35 või kinnitatud tagasiportimisele saate väärtused taas tegeliku vajaduse järgi seada. Vajalikust heldemad need siiski olla ei tohiks: iga piir, mis ületab vajaduse, suurendab ründepinda ilma kasuta. Kui veebisait üleslaadimisi üldse ei vaja, on `file_uploads = Off` kõige puhtam lahendus.

## Veapiltide õige tõlgendamine

Kui üleslaadimised ebaõnnestuvad, reedab käitumine, milline piir rakendub. Leht veaga 413 pärineb veebiserverist. Vorm, mis laeb teateta uuesti või teatab „kehtetu päring“, viitab tühjadele `$_POST`-andmetele, see tähendab `post_max_size`-ile. Rakenduse teade üksiku faili kohta sobib `upload_max_filesize`-iga. Ja väga suurte vormide puuduvad väljad, näiteks tootevariantide puhul, viitavad `max_input_vars`-ile. PHP vealogi sisaldab ületatud `post_max_size` korral tavaliselt hoiatust päringu suurusega.

Et kasutajad ei jääks nõutuks, peaks rakendus juhtumi ära tundma. PHP käsiraamat pakub selleks lihtsa tee: vorm edastab aadressis markeri, näiteks `?processed=1`. Kui marker kohale jõuab, kuid `$_POST` ja `$_FILES` on tühjad, oli päring liiga suur ja rakendus saab kuvada arusaadava teate lubatud suurusega.

## Kuidas PHP SOS konkreetselt aitab?

- Kaardistame kõik teie veebisaitide üleslaadimisteed ja selgitame välja tegelikult vajalikud suurused.
- Seame veebiserveri, PHP ja poolide piirid kooskõlla ning ülekirjutamise vastu lukustatuna, php.net'i üleminekuväärtused kaasa arvatud.
- Testime pärast ümberlülitust vorme, importe ja üleslaadimisi ning kohandame väärtusi sihipäraselt.
- [Serveri karastamise](https://phpsos.de/et/leistungen/server-haertung/) raames viime väärtused pärast uuendust tagasi püsivale vajadusele.


## Korduma kippuvad küsimused

**Mis vahe on post_max_size'il ja upload_max_filesize'il?**  
upload_max_filesize piirab üksiku üleslaaditud faili suurust. post_max_size piirab POST-päringu kõiki andmeid, see tähendab kõiki faile ja vormiväljasid kokku. PHP käsiraamatu järgi peab post_max_size seetõttu olema suurem kui upload_max_filesize.

**Mis juhtub, kui päring on suurem kui post_max_size?**  
PHP käsiraamatu järgi on siis $_POST ja $_FILES tühjad. Rakendus ei saa vormiandmeid üldse kätte ning näitab sageli ainult ebaselget veateadet või laadib vormi uuesti. See muudab vea raskesti tuvastatavaks.

**Milliseid väärtusi soovitab php.net PHP2Shelli tõttu?**  
Üleminekumeetmena kuni uuenduseni: post_max_size = 8M rakendustele ilma failide üleslaadimiseta, 32M üleslaadimistega rakendustele ja upload_max_filesize sellest allpool. php.net'i järgi ei ole see täielik kaitse; augud sulgeb ainult uuendus parandatud PHP versioonile.

**Kas saan post_max_size'i koodis käsuga ini_set() muuta?**  
Ei. PHP käsiraamatu järgi on post_max_size muudetav ainult kataloogitasandil, näiteks failis php.ini, FPM-poolis, failis .user.ini või mod_php puhul failis .htaccess. Kes tahab väärtuse peale sundida, seab selle käsuga php_admin_value, siis ei saa seda üle kirjutada ka .user.ini.

## Allikad

- [php.net: turvateade 21.10.2026](https://www.php.net/)
- [PHP käsiraamat: põhisätted (post_max_size)](https://www.php.net/manual/en/ini.core.php)
- [Nginxi dokumentatsioon: client_max_body_size](https://nginx.org/en/docs/http/ngx_http_core_module.html)
- [Apache'i dokumentatsioon: LimitRequestBody](https://httpd.apache.org/docs/2.4/mod/core.html)
