Lühidalt: php.ini on PHP keskne seadistusfail. PHP loeb seda käivitamisel, servermoodulite puhul ühe korra, CGI ja CLI puhul igal väljakutsel. Lisaks tulevad lisafailid skannimiskataloogist, sätted FPM-poolis või Apache'is, .htaccess või .user.ini ning ini_set() koodis. Millist tasandit tohib väärtust muuta, määrab selle muutmisrežiim, näiteks INI_SYSTEM või INI_PERDIR. Väärtusi, mis on seatud php_admin_value kaudu, rakendus enam üle kirjutada ei saa.
Mis on php.ini?
php.ini on tekstifail kirjetega mustri name = wert järgi. See määrab, kuidas PHP käitub: kui palju mälu skript tohib kasutada, kas vead ilmuvad brauseris, kuidas sessioonid töötavad ja millised laiendused laaditakse. Kommentaarid algavad semikooloniga.
PHP käsiraamatu järgi loetakse faili PHP käivitamisel. Servermoodulite nagu mod_php puhul toimub see ainult üks kord, veebiserveri käivitamisel, CGI ja CLI puhul igal väljakutsel. PHP-FPM loeb oma seadistuse teenuse käivitamisel ja uuesti laadimisel. Muudatus ilma taaskäivituse või reloadita ei mõju seetõttu enamasti.
Alates PHP 8.3-st võib kirje käsiraamatu järgi viidata keskkonnamuutujale koos asendusväärtusega:
memory_limit = ${PHP_MEMORY_LIMIT}
max_execution_time = ${PHP_MAX_EXECUTION_TIME:-30}
Kust PHP php.ini-d otsib?
Käsiraamat kirjeldab kindlat järjekorda. Esmalt kehtib selgesõnaliselt seatud tee, näiteks PHPIniDir Apache'is või valik -c CGI ja CLI puhul. Muidu ehitab PHP otsingutee järgmistest:
- keskkonnamuutuja
PHPRC, - Windowsis registrikirje
IniFilePath, - praegune töökataloog, välja arvatud SAPI-d, mis selle välja lülitavad, näiteks CLI,
- PHP binaarfaili või mooduli kataloog,
- kompileerimisel seatud tee
--with-config-file-path.
Sellel otsinguteel otsib PHP kõigepealt faili php-SAPI.ini, näiteks php-cli.ini, ja alles seejärel faili php.ini. Seejärel loeb PHP kõik .ini failid skannimiskataloogist, mis on määratud PHP_INI_SCAN_DIR kaudu või kompileerimisel --with-config-file-scan-dir kaudu, tähestikulises järjekorras. Milliseid faile laaditi, näitab php --ini või funktsioon php_ini_scanned_files().
php --ini
php -r 'var_dump(php_ini_loaded_file(), php_ini_scanned_files());'
Mõlemad käsud näitavad käsurea seisu. Veebisaidi jaoks võib kehtida teine fail, sest igal SAPI-l võib olla oma seadistus; lisateavet leiate lehelt SAPI selgitus.
Muutmisrežiimid: kes tohib millist väärtust seada?
Kõiki sätteid ei tohi seada igal pool. Käsiraamat seostab iga direktiiviga muutmisrežiimi:
| Režiim | Kus väärtust tohib seada |
|---|---|
INI_USER |
skriptides ini_set() abil, Windowsi registris ja failis .user.ini |
INI_PERDIR |
failis php.ini, .htaccess, httpd.conf või .user.ini |
INI_SYSTEM |
ainult failis php.ini või httpd.conf |
INI_ALL |
igal pool |
Näited käsiraamatust: memory_limit on režiimiga INI_ALL ja vaikeväärtusega 128M, post_max_size on INI_PERDIR ja vaikeväärtusega 8M, upload_max_filesize on INI_PERDIR ja vaikeväärtusega 2M. expose_php tohib olla ainult failis php.ini.
.user.ini faile loevad käsiraamatu järgi ainult CGI ja FastCGI SAPI-d, seega ka PHP-FPM. PHP otsib neid skripti kataloogist ülespoole kuni Document Root'ini ja loeb neid vaikimisi uuesti kõige rohkem iga 300 sekundi järel (user_ini.cache_ttl). mod_php all täidab selle rolli .htaccess.
Milline väärtus lõpuks kehtib? Tasandid eelisjärjestuses
Lihtsustatult kehtib: mida hiljem tasand mõjuma hakkab, seda tõenäolisemalt selle väärtus domineerib, kui muutmisrežiim seda lubab.
- vastava SAPI php.ini
- lisafailid skannimiskataloogist, tähestikuliselt
- serveriseadistus: FPM-pool koos
php_valuevõiphp_admin_value, Apache'i VirtualHost - kataloogitasand:
.htaccessmod_php puhul,.user.iniFPM-i ja CGI puhul - käitusaeg:
ini_set()rakenduse koodis
Erand on otsustav: väärtusi, mis on seatud php_admin_value või php_admin_flag kaudu, ei saa käsiraamatu järgi ini_set() abil üle kirjutada. Nii lukustavad administraatorid turvaseisukohast olulised sätted rakenduse eest. Üksikasjalikult on see kirjeldatud lehel php_admin_value: sätete lukustamine ülekirjutamise vastu.
php.ini pärast PHP2Shelli: mis on muutunud
php.net-i ajutised meetmed PHP2Shelli vastu on peaaegu kõik INI sätted: memory_limit=-1 ülekirjutamise vastu lukustatult, piiratud post_max_size, session.upload_progress.enabled=0 ja PHP 8.5-l fatal_error_backtraces=0. php.net rõhutab, et session.upload_progress.enabled ei tohiks seada ini_set() ega .user.ini kaudu, vaid failis php.ini, FPM-poolis või serveriseadistuses, millele järgneb kõigi workerite taaskäivitus. Täieliku loetelu leiate lehelt Kohesed meetmed, kui te ei saa veel paikata.
Parandatud versioonidega 8.5.12, 8.4.27, 8.3.36 ja 8.2.35 on käsiraamatu järgi muutunud ka memory_limit: see on nüüd pehme piir. Uus säte memory_hard_limit_percent määrab kõva piiri. Ilma oma väärtuseta on see memory_limit kahekordne, rohkem kui 1G korral väärtus pluss 1G. Selle ületamisel lõpeb protsess kohe väljumisolekuga 137. Kuidas mõlemad piirid mõistlikult valida, selgitab memory_limit õige seadmine.
Käsiraamatu järgi kehtib: kui PHP versioon ei tunne memory_hard_limit_percent sätet, on see CVE-2026-109618 ja CVE-2026-109619 poolt mõjutatud. Backportidega distributsioonide puhul tõendab seisu lisaks paketi muudatuslogi.
Kuidas PHP SOS konkreetselt aitab?
- Mõjusate väärtuste väljaselgitamine: Loeme iga SAPI kohta välja, millised failid laaditakse ja milline väärtus lõpuks kehtib.
- Tasandite korrastamine: Eemaldame vastuolulised kirjed paneelidest, pooldest,
.htaccessja.user.inifailidest. - Lukkude seadmine: Serveri karastamise raames fikseerime turvaseisukohast olulised väärtused
php_admin_valuekaudu. - Tõendamine: Dokumenteerime sätted ja taaskäivituse, et seis oleks hiljem tõendatav.
Korduma kippuvad küsimused
Kus php.ini asub?
See sõltub operatsioonisüsteemist, paketist ja SAPI-st. Debianis ja Ubuntus on iga versiooni ja SAPI jaoks oma kaustad, näiteks /etc/php/8.3/fpm/php.ini ja /etc/php/8.3/cli/php.ini. Käsureal näitab php --ini laaditud faile, veebisaidi jaoks aitab ajutises kontrollifailis php_ini_loaded_file().
Millises järjekorras loetakse conf.d kausta faile?
PHP käsiraamatu järgi loeb PHP kõik laiendiga .ini failid skannimiskataloogis tähestikulises järjekorras. Hilisemad failid kirjutavad varasemate väärtused üle. Seetõttu kannavad paljud failid nimes numbreid nagu 20- või 99-.
Miks minu muudatus failis php.ini ei mõju?
Sagedased põhjused: muudeti teise SAPI faili, teenust ei käivitatud uuesti, FPM-pooli, Apache'i seadistuse või faili .user.ini väärtus kirjutab selle üle või majutuspaneel kirjutab faili järgmisel salvestamisel uuesti.
Mis on memory_hard_limit_percent?
Uus säte, mis võeti PHP käsiraamatu järgi kasutusele 21.10.2026 turvaväljalasetega. See määrab kõva mälupiiri memory_limit'i protsendina. Käsiraamat juhib tähelepanu, et PHP versioon, mis seda sätet ei tunne, on PHP2Shelli turvaaukudest mõjutatud.