Sitwazzjoni attwali: PHP2Shell. Żewġ vulnerabbiltajiet kritiċi ta' PHP (CVSS 9,2) jippermettu kodiċi malizzjuż mingħajr login. Patches mill-21/10/2026.X'għandu jsir issa →

OPcache spjegat: il-cache tal-bytecode ta' PHP

OPcache iżomm kodiċi PHP mittraduċi fil-memorja kondiviża. Dan jiffranka ħin tal-kalkolu, imma jitlob attenzjoni fid-deployments, fir-restarts u fuq servers b'diversi klijenti.

Stat 5 min. qariGħarfien dwar PHP

Fil-qosor: OPcache huwa l-cache tal-bytecode integrata ta' PHP. Skont il-manwal, jaħżen bytecode diġà kkompilat fil-memorja kondiviża, hekk li PHP ma jkollhiex bżonn terġa' tgħabbi u tittraduċi l-iskripts ma' kull talba. Huwa parti mill-pakkett minn PHP 5.5.0 'l quddiem. OPcache jagħmel lil PHP aktar mgħaġġla, imma ma jissostitwixxix aġġornament: wara patch ta' PHP il-proċessi kollha ta' PHP iridu jerġgħu jinbdew, mhux biss il-cache titbattal.

X'jagħmel OPcache eżattament?

Ma' kull talba PHP trid taqra skrip, tfarrku u ttraduċih f'opcodes, jiġifieri l-kmandi għall-magna virtwali taz-Zend Engine. F'CMS b'mijiet ta' fajls dan huwa ħafna xogħol li jerġa' jittallab kontinwament.

OPcache jaħżen ir-riżultat ta' din it-traduzzjoni fil-memorja kondiviża (shared memory). Il-workers kollha ta' servizz PHP-FPM jew il-proċessi kollha ta' Apache b'mod_php jaċċessawha. Jekk fajl ma jinbidilx, il-bytecode tiegħu jerġa' jintuża direttament.

OPcache jitgħabba bħala estensjoni Zend, mhux bħala estensjoni normali:

; Linux (il-mogħdija tvarja skont il-pakkett)
zend_extension=opcache.so
; Windows
; zend_extension=php_opcache.dll

Skont il-manwal, OPcache għandu jitgħabba qabel Xdebug jekk it-tnejn ikunu attivi.

Importanti hu min is-sid tal-memorja kondiviża. Ma' PHP-FPM il-proċess master joħloqha u l-workers kollha tal-pools kollha ta' dan is-servizz jużawha. Ma' mod_php hija parti mill-proċess prinċipali ta' Apache. Restart tas-servizz għalhekk ibattal il-cache kompletament, worker ġdid individwali le. Għall-linja tal-kmand m'hemm l-ebda memorja kondiviża bejn is-sejħiet, għax kull sejħa hija proċess separat; hemmhekk OPcache huwa mitfi b'mod predefinit.

Għal min jieħu d-deċiżjonijiet tkun biżżejjed regola prattika: OPcache huwa kważi dejjem utli fuq servers tal-produzzjoni, imma jitlob proċess ċar għad-deployments u l-aġġornamenti.

Liema settings ta' OPcache jgħoddu?

Il-valuri li ġejjin joħorġu mill-paġna tal-konfigurazzjoni tal-manwal ta' PHP. Il-kolonna „Jista' jinbidel“ turi fejn setting jista' jiġi ssettjat: INI_SYSTEM biss f'php.ini jew fil-konfigurazzjoni tas-server, INI_ALL kullimkien.

Direttiva Standard Jista' jinbidel Tifsira
opcache.enable 1 INI_ALL cache mixgħula jew mitfija, waqt it-tħaddim jista' jintefa biss
opcache.enable_cli 0 INI_SYSTEM cache għal-linja tal-kmand
opcache.memory_consumption 128 INI_SYSTEM daqs tal-memorja kondiviża f'MB
opcache.interned_strings_buffer 8 INI_SYSTEM memorja għal ktajjen ta' karattri komuni f'MB
opcache.max_accelerated_files 10000 INI_SYSTEM numru massimu ta' skripts fil-cache
opcache.validate_timestamps 1 INI_ALL jivverifika jekk il-fajls inbidlux
opcache.revalidate_freq 2 INI_ALL intervall tal-verifika f'sekondi, 0 = ma' kull talba
opcache.restrict_api vojt INI_SYSTEM jippermetti funzjonijiet tal-API biss minn mogħdija waħda
opcache.validate_permission 0 INI_SYSTEM jivverifika d-drittijiet tal-fajls kontra l-utent kurrenti
opcache.validate_root 0 INI_SYSTEM jipprevjeni kolliżjonijiet ta' ismijiet ma' chroot
opcache.file_cache vojt INI_SYSTEM it-tieni livell tal-cache fuq id-diska

Konfigurazzjoni tipika tal-produzzjoni tista' tidher hekk. Ivverifikaw il-valuri qabel mal-applikazzjoni tagħkom:

opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=20000
opcache.validate_timestamps=1
opcache.revalidate_freq=60
opcache.restrict_api=/var/www/admin-tools

Min jissettja opcache.validate_timestamps=0 jikseb ftit prestazzjoni. Imbagħad OPcache ma jagħrafx aktar xejn fajls mibdula, u kull deployment jeħtieġ reset tal-cache jew restart.

Kif tosservaw il-cache u tbattluha b'mod immirat

OPcache jiġi b'funzjonijiet proprji, fosthom opcache_get_status(), opcache_get_configuration(), opcache_invalidate() u opcache_reset(). Ħarsa qasira, għall-qari biss, lejn il-livell tal-mili:

<?php
$status = opcache_get_status(false);
if ($status === false) {
    exit("OPcache ist nicht aktiv.\n");
}
printf("Gecachte Skripte: %d\n", $status['opcache_statistics']['num_cached_scripts']);
printf("Freier Speicher: %.1f MB\n", $status['memory_usage']['free_memory'] / 1048576);

Fuq servers b'diversi websajts ma għandhiex kull applikazzjoni tkun tista' tbattal jew taqra l-cache tal-oħrajn kollha. Għal dan hemm opcache.restrict_api: skripts biss taħt il-mogħdija speċifikata jistgħu isejħu l-funzjonijiet tal-API.

JIT: il-kompilatur tal-kodiċi tal-magna f'OPcache

Minn PHP 8.0 'l quddiem OPcache fih kompilatur JIT li jittraduċi l-opcodes f'kodiċi tal-magna. Skont l-RFC tal-JIT, huwa parti kważi awtonoma ta' OPcache u jpoġġi l-kodiċi prodott f'żona proprja tal-memorja kondiviża. Jiġi kkontrollat permezz ta' opcache.jit u opcache.jit_buffer_size. Minn PHP 8.4.0 opcache.jit huwa b'mod predefinit fuq disable. Meta l-JIT jaqbel jispjega l-artikolu JIT u prestazzjoni f'PHP 8.

OPcache u s-sigurtà: x'japplika wara PHP2Shell

OPcache mhuwiex għodda tas-sigurtà, imma għandu konsegwenzi għas-sigurtà. Wara PHP2Shell tliet punti huma importanti:

  1. Reset tal-cache mhuwiex aġġornament. opcache_reset() ibattal biss skripts fil-cache. L-interpretatur bil-vulnerabbiltajiet CVE-2026-109618 u CVE-2026-109619 jibqa' fil-memorja sakemm il-proċessi kollha jerġgħu jinbdew. Kif isir dan jinsab taħt Terġgħu tibdew PHP-FPM u l-workers kollha.
  2. Kodiċi injettat jista' jibqa' ħaj fil-cache. Jekk fajl ġie manipulat u aktar tard sostitwit, meta l-verifika tat-timestamps tkun mitfija l-verżjoni l-qadima tista' tkompli tiġi eżegwita. Wara tindif għalhekk jappartjeni restart.
  3. Memorja kondiviża teħtieġ separazzjoni. Fuq servers b'diversi klijenti jgħinu pools PHP-FPM proprji għal kull websajt kif ukoll opcache.validate_permission u opcache.restrict_api. Direttorju għal opcache.file_cache jista' jkun miktub biss mill-utent ta' PHP.
Suġġeriment

Wara kull aġġornament ivverifikaw jekk il-ħin tal-bidu tal-proċessi ta' PHP huwiex wara l-aġġornament. OPcache mimli b'rata għolja ta' hits mhuwiex prova li l-interpretatur il-ġdid qed jaħdem.

Kif jgħin PHP SOS konkretament?

  • Nivverifikaw il-konfigurazzjoni: Naqraw il-konfigurazzjoni attiva ta' OPcache għal kull modalità tat-tħaddim u nqabbluha mal-applikazzjoni tagħkom.
  • Nassiguraw id-deployments: Nistabbilixxu proċess fiss għar-reset tal-cache u r-restart, biex ebda verżjoni antika tal-kodiċi ma tibqa' taħdem.
  • Nifirdu l-klijenti: Fil-qafas tal-tisħiħ tas-server nissettjaw pools separati, restrict_api u drittijiet xierqa.
  • Nikkontrollaw wara l-aġġornamenti: Nipprovaw permezz tal-ħinijiet tal-bidu tal-proċessi li l-interpretatur aġġornat huwa verament attiv.

Mistoqsijiet frekwenti

OPcache huwa attiv awtomatikament?

OPcache jiġi fornut ma' PHP minn PHP 5.5.0 'l quddiem u, skont il-manwal, jaħdem b'opcache.enable=1 bħala standard hekk kif l-estensjoni tkun imgħobbija. Jekk hijiex imgħobbija jiddependi mill-pakkett jew mill-hoster tagħkom. Fuq il-linja tal-kmand, OPcache bil-kontra huwa mitfi b'mod predefinit (opcache.enable_cli=0).

Għaliex wara deployment għadni nara l-kodiċi l-qadim?

Probabbilment OPcache jiċċekkja t-tibdiliet tal-fajls f'intervalli biss jew qatt. B'opcache.revalidate_freq jistenna żewġ sekondi b'mod predefinit, b'opcache.validate_timestamps=0 qatt. Allura jgħin biss reset tal-cache jew restart ta' PHP-FPM jew Apache.

opcache_reset() huwa biżżejjed wara aġġornament ta' PHP?

Le. opcache_reset() ibattal biss il-cache bl-iskripts mittradotti. Aġġornament ta' PHP jissostitwixxi l-interpretatur innifsu, u dan huwa mgħobbi f'kull proċess li jaħdem. Għal dan il-proċessi kollha ta' PHP iridu jerġgħu jinbdew.

Il-JIT huwa mixgħul f'PHP 8.4?

Skont il-manwal, opcache.jit minn PHP 8.4.0 'l quddiem huwa b'mod predefinit issettjat fuq disable, filwaqt li opcache.jit_buffer_size huwa 64M. Qabel kien bil-kontra: jit fuq tracing, buffer fuq 0. Fiż-żewġ każijiet il-JIT mhuwiex attiv mingħajr konfigurazzjoni deliberata.

Sorsi

Kuntatt immedjat

Kull siegħa tgħodd. Iktbu lilna issa.

Iddeskrivu fil-qosor is-sistema, il-verżjoni ta' PHP u dak li osservajtu. Nikkuntattjawkom, niċċaraw is-sitwazzjoni u naħdmu mill-bogħod sakemm l-inċident jingħalaq u jiġi ddokumentat.

Għajnuna immedjata