Hosting web

OPcache

Definizione

OPcache è l’estensione di PHP che conserva in memoria condivisa il codice degli script già compilato (gli opcode). PHP non deve più rileggere e analizzare ogni file a ogni richiesta, il che accelera molto applicazioni come WordPress, composte da centinaia di file PHP caricati a ogni pagina.

OPcache, Hosting web

PHP è un linguaggio interpretato: prima di eseguire un file lo legge, lo analizza e lo traduce in istruzioni interne, gli opcode. Senza cache questo lavoro viene rifatto a ogni richiesta, per ciascuno dei file caricati. La documentazione di PHP riassume così il ruolo di OPcache: conserva il bytecode precompilato degli script in memoria condivisa, evitando a PHP di caricare e analizzare gli script a ogni richiesta.

Come funziona OPcache

OPcache è un’estensione distribuita con PHP, caricata dalla direttiva zend_extension. Alla prima esecuzione di un file, i suoi opcode vengono messi in memoria condivisa. Le richieste successive li riutilizzano direttamente, qualunque sia il worker PHP-FPM che le gestisce, perché la memoria è comune ai processi di uno stesso master.

Confronto in due colonne. Senza OPcache, a ogni richiesta: lettura dei file PHP dal disco, analisi e compilazione in opcode, esecuzione, poi tutto viene dimenticato. Con OPcache: opcode già in memoria condivisa, esecuzione immediata, controllo delle date di modifica dei file ogni 2 secondi per impostazione predefinita.
OPcache elimina la fase di compilazione, che altrimenti si ripete a ogni richiesta.

Per tenere conto delle modifiche, OPcache controlla per impostazione predefinita la data dei file ogni due secondi (opcache.revalidate_freq=2). Se disattivi questo controllo (opcache.validate_timestamps=0), un possibile guadagno in produzione, le modifiche ai file non vengono più viste finché la cache non viene svuotata con opcache_reset() o con un riavvio di PHP.

Le impostazioni utili

Valori predefiniti documentati da PHP:

  • opcache.memory_consumption: 128 MB di memoria condivisa;
  • opcache.max_accelerated_files: al massimo 10.000 file;
  • opcache.interned_strings_buffer: 8 MB per le stringhe internate;
  • opcache.revalidate_freq: 2 secondi.

Un WordPress con un page builder, WooCommerce e una ventina di plugin può superare il numero di file o la memoria previsti. Oltre quella soglia una parte degli script non viene più messa in cache e il vantaggio si riduce. La funzione opcache_get_status() o un plugin di diagnostica mostra il livello di riempimento.

Da PHP 7.4 il preloading (opcache.preload) carica alcuni file all’avvio di PHP. Non è disponibile su Windows e richiede un riavvio per essere aggiornato: è più adatto ad applicazioni stabili che a un WordPress aggiornato spesso.

Video (in inglese): «Everything about OPcache to increase PHP performance (2026)» (Tideways)

Per WordPress

La documentazione di WordPress raccomanda di aggiungere una cache degli opcode come OPcache per migliorare nettamente le prestazioni di PHP. Completa, senza sostituirle, la cache delle pagine e la cache degli oggetti: OPcache evita la compilazione del codice, la cache degli oggetti evita query al database, la cache delle pagine evita di eseguire PHP.

  • Su un hosting condiviso OPcache è di norma attivo; verificalo con phpinfo() o nelle impostazioni PHP del tuo pannello.
  • Su un VPS, adatta la memoria e il numero di file alla dimensione reale dei tuoi siti.
  • Quando cambi versione di PHP, ricarica PHP-FPM per ripartire da una cache pulita; è anche il momento di controllare che il ramo scelto sia ancora supportato (vedi le versioni di PHP a fine vita).

Sicurezza

Su un server condiviso la cache è comune ai pool di uno stesso master PHP-FPM. Direttive come opcache.validate_permission e opcache.validate_root servono a verificare i permessi sui file in cache e a evitare collisioni negli ambienti chroot. La direttiva opcache.restrict_api limita l’uso delle funzioni di OPcache a un percorso specifico, per evitare che uno script qualsiasi svuoti la cache. Queste impostazioni completano quelle della nostra guida per mettere in sicurezza PHP.

Errori frequenti

Disattivare validate_timestamps e poi non capire perché la modifica a un file non compare; lasciare la memoria predefinita su un sito grande; credere che OPcache sostituisca una cache delle pagine.

Per approfondire

  • Articolo Versioni di PHP a fine vita: calendario, rischi e migrazione

Fonti

  1. PHP Manual: OPcache (link esterno, si apre in una nuova scheda)
  2. PHP Manual: OPcache, runtime configuration (link esterno, si apre in una nuova scheda)
  3. PHP Manual: OPcache, installation (link esterno, si apre in una nuova scheda)
  4. WordPress Advanced Administration: Cache (link esterno, si apre in una nuova scheda)

Tutte le definizioni

Sicurezza WordPress, senza rumore

Un’email quando conta: nuovi attacchi osservati, aggiornamenti del plugin e guide pratiche. Niente spam, disiscrizione con un clic.

Inizia gratis, passa a Pro quando sei pronto

La versione gratuita nasconde già WordPress e sposta la pagina di login. Pro aggiunge alias, autenticazione a due fattori e monitoraggio.