Trenutno stanje: PHP2Shell. Dve kritični ranljivosti PHP (CVSS 9,2) omogočata izvedbo škodljive kode brez prijave. Popravki od 21. 10. 2026.Kaj je zdaj treba storiti →

php.ini razložena: zgradba, ravni in prednost

Kje PHP najde svoje nastavitve, v kakšnem vrstnem redu veljajo in kdo jih sme prepisati. Podlaga za vsako utrjevanje in za prehodne ukrepe proti PHP2Shell.

Stanje 4 min branjaZnanje o PHP

Na kratko: php.ini je osrednja konfiguracijska datoteka PHP. PHP jo prebere ob zagonu, pri strežniških modulih enkrat, pri CGI in CLI ob vsakem klicu. Zraven pridejo dodatne datoteke iz imenika za pregledovanje, nastavitve v poolu FPM ali v Apacheju, .htaccess oziroma .user.ini ter ini_set() v kodi. Katera raven sme vrednost spremeniti, določa njen način spreminjanja, na primer INI_SYSTEM ali INI_PERDIR. Vrednosti prek php_admin_value aplikacija ne more več prepisati.

Kaj je php.ini?

php.ini je besedilna datoteka z vnosi po vzorcu name = wert. Določa, kako se PHP obnaša: koliko pomnilnika sme uporabiti skripta, ali se napake prikažejo v brskalniku, kako delujejo seje in katere razširitve se naložijo. Komentarji se začnejo s podpičjem.

Po priročniku PHP se datoteka prebere ob zagonu PHP. Pri strežniških modulih, kot je mod_php, se to zgodi samo enkrat, ob zagonu spletnega strežnika, pri CGI in CLI ob vsakem klicu. PHP-FPM konfiguracijo prebere ob zagonu in ob ponovnem nalaganju storitve. Sprememba brez ponovnega zagona ali reloada zato praviloma ne deluje.

Od PHP 8.3 lahko vnos po priročniku napoti na spremenljivko okolja z nadomestno vrednostjo:

memory_limit = ${PHP_MEMORY_LIMIT}
max_execution_time = ${PHP_MAX_EXECUTION_TIME:-30}

Kje PHP išče php.ini?

Priročnik opisuje fiksen vrstni red. Najprej velja izrecno nastavljena pot, na primer PHPIniDir v Apacheju ali možnost -c pri CGI in CLI. Sicer PHP sestavi iskalno pot iz:

  1. spremenljivke okolja PHPRC,
  2. v sistemu Windows vnosa v registru IniFilePath,
  3. trenutnega delovnega imenika, razen pri SAPI, ki to izklopijo, na primer CLI,
  4. imenika binarne datoteke PHP oziroma modula,
  5. poti --with-config-file-path, nastavljene ob prevajanju.

Na tej iskalni poti PHP najprej poišče datoteko php-SAPI.ini, na primer php-cli.ini, šele nato php.ini. Nato PHP po abecednem vrstnem redu prebere vse datoteke .ini iz imenika za pregledovanje, ki je določen prek PHP_INI_SCAN_DIR ali ob prevajanju prek --with-config-file-scan-dir. Katere datoteke so bile naložene, prikaže php --ini ali funkcija php_ini_scanned_files().

php --ini
php -r 'var_dump(php_ini_loaded_file(), php_ini_scanned_files());'

Oba ukaza prikažeta stanje ukazne vrstice. Za spletno stran lahko velja druga datoteka, ker ima lahko vsak SAPI lastno konfiguracijo; več na strani SAPI razložen.

Načini spreminjanja: kdo sme nastaviti katero vrednost?

Vsake nastavitve ni dovoljeno določiti povsod. Priročnik vsaki direktivi dodeli način spreminjanja:

Način Kje se vrednost sme nastaviti
INI_USER v skriptah z ini_set(), v registru Windows in v .user.ini
INI_PERDIR v php.ini, .htaccess, httpd.conf ali .user.ini
INI_SYSTEM samo v php.ini ali httpd.conf
INI_ALL povsod

Primeri iz priročnika: memory_limit ima način INI_ALL in privzeto vrednost 128M, post_max_size ima INI_PERDIR in privzeto 8M, upload_max_filesize ima INI_PERDIR in privzeto 2M. expose_php sme stati samo v php.ini.

Datoteke .user.ini po priročniku berejo samo SAPI CGI in FastCGI, torej tudi PHP-FPM. PHP jih išče od imenika skripte navzgor do Document Root in jih privzeto znova prebere največ vsakih 300 sekund (user_ini.cache_ttl). Pod mod_php to vlogo prevzame .htaccess.

Katera vrednost velja na koncu? Ravni in prednost

Poenostavljeno velja: čim pozneje raven zaleže, tem bolj se njena vrednost uveljavi, če to dopušča način spreminjanja.

  1. php.ini posameznega SAPI
  2. Dodatne datoteke iz imenika za pregledovanje, po abecedi
  3. Konfiguracija strežnika: pool FPM s php_value oziroma php_admin_value, VirtualHost Apache
  4. Raven imenika: .htaccess pri mod_php, .user.ini pri FPM in CGI
  5. Čas izvajanja: ini_set() v kodi aplikacije

Izjema je odločilna: vrednosti prek php_admin_value ali php_admin_flag po priročniku ni mogoče prepisati z ini_set(). Tako skrbniki zaklenejo varnostno pomembne nastavitve pred aplikacijo. Podrobno je to opisano na strani php_admin_value: zaklepanje nastavitev pred prepisovanjem.

php.ini po PHP2Shell: kaj se je spremenilo

Prehodni ukrepi php.net proti PHP2Shell so skoraj vsi nastavitve INI: memory_limit=-1 zaklenjen pred prepisovanjem, omejena post_max_size, session.upload_progress.enabled=0 in na PHP 8.5 fatal_error_backtraces=0. php.net poudarja, da session.upload_progress.enabled ne sme biti nastavljen prek ini_set() ali .user.ini, ampak v php.ini, poolu FPM ali konfiguraciji strežnika, z naknadnim ponovnim zagonom vseh workerjev. Celoten seznam je na strani Takojšnji ukrepi, če še ne morete popraviti.

S popravljenimi različicami 8.5.12, 8.4.27, 8.3.36 in 8.2.35 se je po priročniku spremenil tudi memory_limit: zdaj je mehka meja. Nova nastavitev memory_hard_limit_percent določa trdo mejo. Brez lastne vrednosti znaša dvakratnik memory_limit, pri več kot 1G pa vrednost plus 1G. Če je presežena, se proces takoj konča z izhodnim statusom 137. Kako obe meji smiselno izbrati, razlaga Pravilna nastavitev memory_limit.

Nasvet

Po priročniku velja: če različica PHP memory_hard_limit_percent ne pozna, je prizadeta zaradi CVE-2026-109618 in CVE-2026-109619. Pri distribucijah z backporti stanje dodatno dokazuje dnevnik sprememb paketa.

Kako PHP SOS pomaga konkretno?

  • Ugotavljanje veljavnih vrednosti: za vsak SAPI preberemo, katere datoteke se naložijo in katera vrednost na koncu velja.
  • Čiščenje ravni: iz panelov, poolov, .htaccess in .user.ini odstranimo nasprotujoče si vnose.
  • Nastavitev zaklepov: v okviru utrjevanja strežnika varnostno pomembne vrednosti določimo prek php_admin_value.
  • Dokazovanje: nastavitve in ponovni zagon dokumentiramo, da je stanje pozneje mogoče dokazati.

Pogosta vprašanja

Kje leži php.ini?

To je odvisno od operacijskega sistema, paketa in SAPI. V Debianu in Ubuntuju so za vsako različico in SAPI lastne mape, na primer /etc/php/8.3/fpm/php.ini in /etc/php/8.3/cli/php.ini. V ukazni vrstici php --ini prikaže naložene datoteke, za spletno stran pa pomaga php_ini_loaded_file() v kratek čas odloženi preizkusni datoteki.

V kakšnem vrstnem redu se berejo datoteke v mapi conf.d?

Po priročniku PHP PHP prebere vse datoteke s končnico .ini v imeniku za pregledovanje po abecednem vrstnem redu. Poznejše datoteke prepišejo vrednosti prejšnjih. Zato imajo številne datoteke v imenu številke, kot sta 20- ali 99-.

Zakaj moja sprememba php.ini ne deluje?

Pogosti razlogi: spremenjena je bila datoteka drugega SAPI, storitev ni bila znova zagnana, vrednost v poolu FPM, v konfiguraciji Apache ali v .user.ini jo prepiše, ali pa panel za gostovanje datoteko ob naslednjem shranjevanju znova napiše.

Kaj je memory_hard_limit_percent?

Nova nastavitev, ki je bila po priročniku PHP uvedena z varnostnimi izdajami z dne 21. 10. 2026. Trdo omejitev pomnilnika določa kot odstotek memory_limit. Priročnik opozarja, da je različica PHP, ki te nastavitve ne pozna, prizadeta zaradi ranljivosti PHP2Shell.

Viri

Takojšnji stik

Vsaka ura šteje. Pišite nam zdaj.

Na kratko opišite sistem, različico PHP in opažanje. Odzovemo se, razjasnimo stanje in delamo na daljavo, dokler incident ni zaključen in dokumentiran.

Takojšnja pomoč