# OPcache spjegat: il-cache tal-bytecode ta' PHP

> OPcache spjegat: kif taħdem il-cache tal-bytecode ta' PHP, liema settings jgħoddu, għaliex wara l-aġġornamenti jrid jitbattal u kif tassigurawh.

Sors: https://phpsos.de/mt/php/opcache/  
Stat: 25/10/2026  
Fornitur: PHP SOS, Għajnuna ta' emerġenza għal PHP u sigurtà tas-server. Għajnuna immedjata fuq WhatsApp: https://wa.me/491736494914?text=Bongu%20PHP%20SOS%2C%20g%C4%A7andna%20b%C5%BConn%20g%C4%A7ajnuna%20bis-server%20tal-PHP%20tag%C4%A7na.%20Kumpanija%3A%20%E2%80%A6%20Websajt%3A%20%E2%80%A6

**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](https://phpsos.de/mt/php/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:

```ini
; 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:

```ini
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
<?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](https://phpsos.de/mt/php/jit-und-performance/).

## 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](https://phpsos.de/mt/php2shell/php-fpm-neustart/).
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](https://phpsos.de/mt/leistungen/server-haertung/) 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

- [Manwal ta' PHP: OPcache](https://www.php.net/manual/en/book.opcache.php)
- [Manwal ta' PHP: Konfigurazzjoni ta' OPcache](https://www.php.net/manual/en/opcache.configuration.php)
- [Manwal ta' PHP: Installazzjoni ta' OPcache](https://www.php.net/manual/en/opcache.installation.php)
- [PHP RFC: JIT](https://wiki.php.net/rfc/jit)
