PHP è uno dei linguaggi più usati sul web. Anche se spesso viene associato a WordPress, in realtà è molto di più: è un linguaggio di scripting lato server pensato per generare pagine dinamiche, gestire form, autenticazioni, database, API e logiche applicative. In pratica, quando un utente apre una pagina .php, il server esegue il codice, produce HTML e lo invia al browser.

Il motivo della sua diffusione è semplice: è diretto, maturo, compatibile con quasi tutti gli hosting e molto efficace nello sviluppo rapido di applicazioni web. E-commerce, gestionali, CMS, pannelli di controllo e portali personalizzati usano ancora oggi PHP come base operativa.

Che cosa fa PHP, in concreto

PHP serve a:

Esempio minimo:

 
<?php
$name = "Mario";
echo "<h1>Ciao $name</h1>";
 

Il browser non vede il codice PHP: riceve solo il risultato finale, cioè l’HTML generato.

Il punto chiave: PHP da solo non basta

PHP non lavora isolato. Per eseguire uno script servono almeno tre elementi:

  1. Web server: Nginx o Apache

  2. Interprete PHP: il motore che esegue il codice

  3. Database: se l’applicazione usa dati persistenti

Qui entra in gioco FastCGI.


Che cos’è FastCGI

FastCGI è un protocollo che permette al web server di comunicare con processi esterni in modo efficiente. Nel caso di PHP, il caso più comune è PHP-FPM (PHP FastCGI Process Manager).

In pratica:

Perché FastCGI è importante

Senza FastCGI, il server potrebbe dover creare un nuovo processo PHP per ogni richiesta, con forte spreco di CPU e RAM. Con FastCGI, invece, i processi PHP restano già attivi e pronti all’uso.

Questo porta vantaggi concreti:

Esempio pratico di flusso

Un utente apre:

 
https://miosito.it/prodotti.php?id=10
 

Succede questo:


PHP-FPM: il motore reale dietro FastCGI

Quando si parla di FastCGI in ambiente PHP, quasi sempre si intende PHP-FPM. È il gestore di processi che mantiene un pool di worker PHP pronti a eseguire script.

Parametri critici

Nel file di configurazione del pool trovi spesso parametri come:

 
pm = dynamic
pm.max_children = 20
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6
 

Significato operativo

Se max_children è troppo basso, le richieste si accodano.
Se è troppo alto, il server può saturare la RAM.


Il vero collo di bottiglia: ogni richiesta PHP costa

Ogni volta che PHP esegue uno script:

Su siti molto visitati, ripetere tutto questo per ogni pagina può essere inefficiente. Qui entra in gioco la cache.


Che cos’è la cache

La cache è una tecnica che evita di ricalcolare ogni volta lo stesso risultato. Se una pagina o un dato non cambia spesso, il server può riutilizzare una versione già pronta.

Esistono più livelli di cache.

1. OPcache

È la cache più importante per PHP. Memorizza il bytecode compilato degli script, così PHP non deve reinterpretare il file a ogni richiesta.

Vantaggio

Riduce il tempo di esecuzione del codice PHP puro.

Esempio config

 
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
opcache.validate_timestamps=1
opcache.revalidate_freq=2
 

Effetto pratico

Se hai un CMS con centinaia di file PHP, OPcache evita di ricompilarli continuamente. Il guadagno è spesso immediato.


2. Cache applicativa

Qui si salvano risultati già elaborati:

Strumenti comuni:

Esempio pratico con Redis

Scenario: homepage con “ultimi 10 prodotti”.
Invece di interrogare il database a ogni visita:

 
<?php
$cacheKey = "homepage_latest_products";
$data = $redis->get($cacheKey);

if (!$data) {
$products = getLatestProductsFromDatabase();
$data = json_encode($products);
$redis->setex($cacheKey, 300, $data); // cache per 5 minuti
} else {
$products = json_decode($data, true);
}
 

Risultato


3. FastCGI Cache

Questa è spesso la più potente lato Nginx. Invece di eseguire PHP ogni volta, il web server salva direttamente la risposta finale e la restituisce ai visitatori successivi.

In questo caso:

Quando conviene

Perfetta per:

Meno adatta, o da escludere, per:


Esempio pratico di FastCGI Cache in Nginx

 
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=PHPZONE:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";

server {
listen 80;
server_name miosito.it;
root /var/www/html;

location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_cache PHPZONE;
fastcgi_cache_valid 200 10m;
fastcgi_cache_methods GET HEAD;
add_header X-FastCGI-Cache $upstream_cache_status;
}
}
 

Che cosa fa questa config

Header di debug

Nel browser o con curl puoi vedere:

 
X-FastCGI-Cache: HIT
 

Significa che la risposta è arrivata dalla cache.

Oppure:

 
X-FastCGI-Cache: MISS
 

Significa che Nginx ha dovuto eseguire PHP e poi ha memorizzato il risultato.


Caso reale: WordPress con PHP-FPM e FastCGI Cache

Su WordPress, senza cache:

Con FastCGI Cache:

Impatto pratico

Su server piccoli può significare:


Quando la cache diventa un problema

La cache accelera, ma va gestita bene.

Problemi tipici

Per questo si escludono dalla cache:

Esempio:

 
set $skip_cache 0;

if ($request_method = POST) {
set $skip_cache 1;
}

if ($query_string != "") {
set $skip_cache 1;
}

if ($http_cookie ~* "PHPSESSID|wordpress_logged_in") {
set $skip_cache 1;
}
 

Così la cache viene usata solo dove è sicura.


Differenza tra OPcache, Redis e FastCGI Cache

OPcache

Accelera l’esecuzione del codice PHP.

Redis/Memcached

Accelera dati e risultati intermedi.

FastCGI Cache

Evita proprio di eseguire PHP per molte richieste.

In sintesi

La combinazione migliore spesso è:
PHP-FPM + OPcache + Redis + FastCGI Cache


Esempio pratico completo

Immagina un e-commerce con 5.000 visite al giorno.

Senza cache

Ogni visita:

Con ottimizzazione corretta

Risultato


Conclusione

PHP resta una tecnologia centrale per il web perché è pragmatico, compatibile e produttivo. Ma la vera differenza, oggi, non la fa solo il linguaggio: la fa l’architettura attorno ad esso.

FastCGI, attraverso PHP-FPM, rende l’esecuzione di PHP efficiente e gestibile. La cache, poi, porta il sistema a un livello superiore: riduce i tempi di risposta, alleggerisce il server e permette di servire più traffico con meno risorse.

In altre parole: PHP genera il contenuto, FastCGI lo esegue bene, la cache evita di rifarlo inutilmente.