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:
- 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. - 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.
- 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_permissionuopcache.restrict_api. Direttorju għalopcache.file_cachejista' jkun miktub biss mill-utent ta' PHP.
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_apiu 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.