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; üleslaadimisfunktsioonide turvalist programmeerimist kirjeldab Failide üleslaadimise turvaline teostus PHP-s.
Ü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.
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:
- Ilma failide üleslaadimiseta:
post_max_size = 8M. - Failide üleslaadimisega:
post_max_size = 32M. - Mõlemal juhul: hoidke
upload_max_filesizeväärtusestpost_max_sizeallpool. - 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:
; 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, server- või location-plokis
client_max_body_size 32m;
# 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. Kas ja kuidas saab üleslaadimispäringuid lisaks proxys filtreerida, selgitab Üleslaadimispäringute filtreerimine serveri serval.
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 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.