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:
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:
- a
PHPRCkörnyezeti változó, - Windows alatt az
IniFilePathrendszerleíró-bejegyzés, - az aktuális munkakönyvtár, kivéve azoknál a SAPI-knál, amelyek ezt kikapcsolják, például a CLI,
- a PHP-bináris fájl, illetve a modul könyvtára,
- 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.
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 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.
- Az adott SAPI php.ini-je
- A szkennelt könyvtár kiegészítő fájljai, betűrendben
- Szerverkonfiguráció: FPM-pool
php_value, illetvephp_admin_valuebeállítással, Apache VirtualHost - Könyvtárszint:
.htaccessmod_php esetén,.user.iniFPM és CGI esetén - 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 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 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 cikk magyarázza.
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 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.