# php.ini selgitus: ülesehitus, tasandid ja eelisjärjestus

> php.ini selgitatud: kust PHP oma seadistust otsib, millised tasandid on olemas, mida tähendavad INI_SYSTEM ja INI_PERDIR ning milline väärtus lõpuks kehtib.

Allikas: https://phpsos.de/et/php/php-ini-erklaert/  
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:** 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:

```ini
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:

1. keskkonnamuutuja `PHPRC`,
2. Windowsis registrikirje `IniFilePath`,
3. praegune töökataloog, välja arvatud SAPI-d, mis selle välja lülitavad, näiteks CLI,
4. PHP binaarfaili või mooduli kataloog,
5. 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()`.

```bash
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](https://phpsos.de/et/php/sapi-erklaert/).

## 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.

1. vastava SAPI **php.ini**
2. **lisafailid** skannimiskataloogist, tähestikuliselt
3. **serveriseadistus:** FPM-pool koos `php_value` või `php_admin_value`, Apache'i VirtualHost
4. **kataloogitasand:** `.htaccess` mod_php puhul, `.user.ini` FPM-i ja CGI puhul
5. **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](https://phpsos.de/et/blog/php-admin-value-sperren/).

## 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](https://phpsos.de/et/php2shell/sofortmassnahmen-ohne-patch/).

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](https://phpsos.de/et/blog/memory-limit-richtig-setzen/).

> **Näpunäide:**
> 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, `.htaccess` ja `.user.ini` failidest.
- **Lukkude seadmine:** [Serveri karastamise](https://phpsos.de/et/leistungen/server-haertung/) raames fikseerime turvaseisukohast olulised väärtused `php_admin_value` kaudu.
- **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.

## Allikad

- [PHP käsiraamat: seadistusfail](https://www.php.net/manual/en/configuration.file.php)
- [PHP käsiraamat: INI muutmisrežiimid](https://www.php.net/manual/en/configuration.changes.modes.php)
- [PHP käsiraamat: .user.ini failid](https://www.php.net/manual/en/configuration.file.per-user.php)
- [PHP käsiraamat: tuumasätted](https://www.php.net/manual/en/ini.core.php)
