# A php.ini elmagyarázva: felépítés, szintek és elsőbbség

> A php.ini elmagyarázva: hol keresi a PHP a konfigurációját, mely szintek léteznek, mit jelent az INI_SYSTEM és az INI_PERDIR, és melyik érték érvényes végül.

Forrás: https://phpsos.de/hu/php/php-ini-erklaert/  
Állapot: 2026. 10. 25.  
Szolgáltató: PHP SOS, PHP-vészhelyzeti segítség és szerverbiztonság. Azonnali segítség WhatsAppon: https://wa.me/491736494914?text=%C3%9Cdv%C3%B6zl%C3%B6m%2C%20PHP%20SOS%21%20Seg%C3%ADts%C3%A9gre%20van%20sz%C3%BCks%C3%A9g%C3%BCnk%20a%20PHP-szerver%C3%BCnkkel.%20C%C3%A9g%3A%20%E2%80%A6%20Weboldal%3A%20%E2%80%A6

**Röviden:** A php.ini a PHP központi konfigurációs fájlja. A PHP induláskor olvassa be, szervermodulok esetén egyszer, CGI és CLI esetén minden híváskor. Ehhez jönnek egy szkennelt könyvtár kiegészítő fájljai, az FPM-poolban vagy az Apache-ban megadott beállítások, a `.htaccess`, illetve a `.user.ini`, valamint az `ini_set()` a kódban. Hogy melyik szint módosíthat egy értéket, azt a módosítási módja szabja meg, például `INI_SYSTEM` vagy `INI_PERDIR`. A `php_admin_value` útján megadott értékeket az alkalmazás már nem írhatja felül.

## Mi a php.ini?

A php.ini egy szövegfájl `name = wert` mintájú bejegyzésekkel. Meghatározza, hogyan viselkedik a PHP: mennyi memóriát használhat egy szkript, megjelennek-e a hibák a böngészőben, hogyan működnek a munkamenetek, és mely bővítmények töltődnek be. A megjegyzések pontosvesszővel kezdődnek.

A PHP-kézikönyv szerint a fájlt a PHP induláskor olvassa be. Szervermodulok, például a mod_php esetén ez csak egyszer történik, a webszerver indításakor, CGI és CLI esetén minden híváskor. A PHP-FPM a konfigurációját induláskor és a szolgáltatás újratöltésekor olvassa be. Az újraindítás vagy reload nélküli módosítás ezért többnyire nem hat.

A PHP 8.3 óta a kézikönyv szerint egy bejegyzés hivatkozhat egy tartalékértékkel rendelkező környezeti változóra:

```ini
memory_limit = ${PHP_MEMORY_LIMIT}
max_execution_time = ${PHP_MAX_EXECUTION_TIME:-30}
```

## Hol keresi a PHP a php.ini-t?

A kézikönyv rögzített sorrendet ír le. Először egy kifejezetten megadott útvonal érvényes, például az Apache `PHPIniDir` beállítása vagy a `-c` kapcsoló CGI és CLI esetén. Egyébként a PHP keresési útvonalat épít a következőkből:

1. a `PHPRC` környezeti változó,
2. Windows alatt az `IniFilePath` rendszerleíró-bejegyzés,
3. az aktuális munkakönyvtár, kivéve azoknál a SAPI-knál, amelyek ezt kikapcsolják, például a CLI,
4. a PHP-bináris fájl, illetve a modul könyvtára,
5. a fordításkor megadott `--with-config-file-path` útvonal.

Ebben a keresési útvonalban a PHP először egy `php-SAPI.ini` fájlt keres, például `php-cli.ini`-t, és csak utána a `php.ini`-t. Ezután a PHP betűrendben beolvassa az összes `.ini` fájlt a szkennelt könyvtárból, amelyet a `PHP_INI_SCAN_DIR` vagy fordításkor a `--with-config-file-scan-dir` határoz meg. Hogy mely fájlok töltődtek be, azt a `php --ini` vagy a `php_ini_scanned_files()` függvény mutatja.

```bash
php --ini
php -r 'var_dump(php_ini_loaded_file(), php_ini_scanned_files());'
```

Mindkét parancs a parancssor állapotát mutatja. A weboldalra másik fájl érvényes lehet, mert minden SAPI-nak lehet saját konfigurációja; erről bővebben [A SAPI elmagyarázva](https://phpsos.de/hu/php/sapi-erklaert/) oldalon.

## Módosítási módok: ki melyik értéket állíthatja be?

Nem minden beállítás adható meg mindenhol. A kézikönyv minden direktívához módosítási módot rendel:

| Mód | Hol adható meg az érték |
|---|---|
| `INI_USER` | szkriptekben az `ini_set()` útján, a Windows rendszerleíró adatbázisban és a `.user.ini`-ben |
| `INI_PERDIR` | a php.ini-ben, a `.htaccess`-ben, a `httpd.conf`-ban vagy a `.user.ini`-ben |
| `INI_SYSTEM` | csak a php.ini-ben vagy a `httpd.conf`-ban |
| `INI_ALL` | bárhol |

Példák a kézikönyvből: a `memory_limit` módja `INI_ALL`, alapértéke `128M`, a `post_max_size` módja `INI_PERDIR`, alapértéke `8M`, az `upload_max_filesize` módja `INI_PERDIR`, alapértéke `2M`. Az `expose_php` csak a php.ini-ben szerepelhet.

A `.user.ini` fájlokat a kézikönyv szerint csak a CGI és a FastCGI SAPI-k olvassák, tehát a PHP-FPM is. A PHP a szkript könyvtárától felfelé keresi őket a Document Rootig, és alapértelmezetten legfeljebb 300 másodpercenként olvassa be újra (`user_ini.cache_ttl`). mod_php alatt ezt a szerepet a `.htaccess` veszi át.

## Melyik érték érvényes végül? A szintek elsőbbsége

Leegyszerűsítve: minél később lép működésbe egy szint, annál inkább az ő értéke érvényesül, amennyiben a módosítási mód ezt megengedi.

1. Az adott SAPI **php.ini**-je
2. A szkennelt könyvtár **kiegészítő fájljai**, betűrendben
3. **Szerverkonfiguráció:** FPM-pool `php_value`, illetve `php_admin_value` beállítással, Apache VirtualHost
4. **Könyvtárszint:** `.htaccess` mod_php esetén, `.user.ini` FPM és CGI esetén
5. **Futásidő:** `ini_set()` az alkalmazáskódban

A kivétel döntő: a `php_admin_value` vagy `php_admin_flag` útján megadott értékeket a kézikönyv szerint nem lehet az `ini_set()` segítségével felülírni. Az adminisztrátorok így zárolják a biztonság szempontjából fontos beállításokat az alkalmazással szemben. Részletesen leírja a [php_admin_value: beállítások zárolása a felülírás ellen](https://phpsos.de/hu/blog/php-admin-value-sperren/) cikk.

## A php.ini a PHP2Shell után: mi változott

A php.net PHP2Shellre vonatkozó átmeneti intézkedései szinte mind INI-beállítások: a `memory_limit=-1` zárolva a felülírás ellen, korlátozott `post_max_size`, `session.upload_progress.enabled=0`, és PHP 8.5-ön `fatal_error_backtraces=0`. A php.net hangsúlyozza, hogy a `session.upload_progress.enabled` értéket nem az `ini_set()` vagy a `.user.ini` útján kell megadni, hanem a php.ini-ben, az FPM-poolban vagy a szerverkonfigurációban, majd az összes worker újraindításával. A teljes lista a [Sürgősségi intézkedések, ha még nem tud javítani](https://phpsos.de/hu/php2shell/sofortmassnahmen-ohne-patch/) oldalon található.

A javított 8.5.12, 8.4.27, 8.3.36 és 8.2.35 verziókkal a kézikönyv szerint a `memory_limit` is megváltozott: mostantól lágy korlát. Az új `memory_hard_limit_percent` beállítás kemény korlátot szab. Saját érték nélkül ez a `memory_limit` kétszerese, `1G` felett az érték plusz `1G`. Ha túllépik, a folyamat azonnal 137-es kilépési állapottal ér véget. Hogyan válassza meg ésszerűen mindkét korlátot, azt a [A memory_limit helyes beállítása](https://phpsos.de/hu/blog/memory-limit-richtig-setzen/) cikk magyarázza.

> **Tipp:**
> A kézikönyv szerint: ha egy PHP-verzió nem ismeri a `memory_hard_limit_percent` beállítást, érintett a CVE-2026-109618 és a CVE-2026-109619 résekben. Backportokat használó disztribúcióknál emellett a csomag változásnaplója (changelog) igazolja az állapotot.

## Hogyan segít konkrétan a PHP SOS?

- **Érvényes értékek megállapítása:** Minden SAPI-ra kiolvassuk, mely fájlok töltődnek be, és melyik érték érvényes végül.
- **Szintek rendbetétele:** Eltávolítjuk az ellentmondásos bejegyzéseket a panelekből, poolokból, a `.htaccess`-ből és a `.user.ini`-ből.
- **Zárolások beállítása:** A [szerver-megerősítés](https://phpsos.de/hu/leistungen/server-haertung/) keretében a biztonság szempontjából fontos értékeket `php_admin_value` útján rögzítjük.
- **Igazolás:** Dokumentáljuk a beállításokat és az újraindítást, hogy az állapot később bizonyítható legyen.


## Gyakori kérdések

**Hol található a php.ini?**  
Ez az operációs rendszertől, a csomagtól és a SAPI-tól függ. Debianon és Ubuntun verziónként és SAPI-nként külön könyvtárak vannak, például /etc/php/8.3/fpm/php.ini és /etc/php/8.3/cli/php.ini. A parancssorban a php --ini megmutatja a betöltött fájlokat, a weboldalhoz a php_ini_loaded_file() segít egy rövid időre elhelyezett ellenőrző fájlban.

**Milyen sorrendben olvasódnak be a conf.d könyvtár fájljai?**  
A PHP-kézikönyv szerint a PHP a szkennelt könyvtár összes .ini kiterjesztésű fájlját betűrendben olvassa be. A későbbi fájlok felülírják a korábbiak értékeit. Ezért viselnek sok fájlnevet olyan számok, mint a 20- vagy a 99-.

**Miért nem hat a php.ini-ben végzett módosításom?**  
Gyakori okok: egy másik SAPI fájlját módosították, a szolgáltatást nem indították újra, egy érték az FPM-poolban, az Apache-konfigurációban vagy egy .user.ini-ben felülírja, vagy egy tárhelyvezérlő panel a következő mentéskor újraírja a fájlt.

**Mi a memory_hard_limit_percent?**  
Egy új beállítás, amelyet a PHP-kézikönyv szerint a 2026. 10. 21-i biztonsági kiadásokkal vezettek be. A memory_limit százalékaként kemény memóriakorlátot határoz meg. A kézikönyv felhívja a figyelmet arra, hogy az a PHP-verzió, amely nem ismeri ezt a beállítást, érintett a PHP2Shell-résekben.

## Források

- [PHP-kézikönyv: A konfigurációs fájl](https://www.php.net/manual/en/configuration.file.php)
- [PHP-kézikönyv: INI-módosítási módok](https://www.php.net/manual/en/configuration.changes.modes.php)
- [PHP-kézikönyv: .user.ini fájlok](https://www.php.net/manual/en/configuration.file.per-user.php)
- [PHP-kézikönyv: Alapbeállítások](https://www.php.net/manual/en/ini.core.php)
