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:
-
leggere e scrivere dati su database come MySQL o MariaDB
-
gestire login e sessioni
-
creare pagine dinamiche
-
elaborare richieste HTTP
-
costruire API REST
-
inviare email, file, report e automazioni lato server
Esempio minimo:
$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:
-
Web server: Nginx o Apache
-
Interprete PHP: il motore che esegue il codice
-
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:
-
Nginx riceve la richiesta
-
se la pagina è PHP, la gira a PHP-FPM tramite FastCGI
-
PHP-FPM esegue lo script
-
restituisce il risultato a Nginx
-
Nginx invia la risposta al browser
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:
-
minore latenza
-
meno overhead
-
migliore gestione del carico
-
più richieste servite contemporaneamente
-
maggiore stabilità sotto traffico elevato
Esempio pratico di flusso
Un utente apre:
Succede questo:
-
Nginx riceve la richiesta
-
riconosce che è un file PHP
-
inoltra la richiesta a PHP-FPM via FastCGI
-
PHP legge
id=10 -
interroga il database
-
genera HTML con i dati del prodotto
-
Nginx invia la pagina finale
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.max_children = 20
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6
Significato operativo
-
pm.max_children: numero massimo di richieste PHP simultanee -
pm.start_servers: processi avviati all’inizio -
pm.min_spare_serversepm.max_spare_servers: riserva di processi pronti
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:
-
carica codice
-
inizializza variabili
-
apre sessioni
-
interroga il database
-
costruisce l’output
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.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:
-
query SQL
-
oggetti
-
sessioni
-
frammenti HTML
-
risposte API
Strumenti comuni:
-
Redis
-
Memcached
Esempio pratico con Redis
Scenario: homepage con “ultimi 10 prodotti”.
Invece di interrogare il database a ogni visita:
$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
-
meno query SQL
-
pagina più veloce
-
database meno sotto stress
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:
-
la prima richiesta passa da PHP
-
le successive vengono servite direttamente dalla cache
-
PHP-FPM non viene nemmeno coinvolto
Quando conviene
Perfetta per:
-
blog
-
siti vetrina
-
pagine prodotto poco variabili
-
articoli letti da molti utenti anonimi
Meno adatta, o da escludere, per:
-
carrelli
-
aree riservate
-
pagine personalizzate per utente loggato
Esempio pratico di FastCGI Cache in Nginx
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
-
crea un’area cache su disco
-
salva le risposte PHP
-
usa la cache per richieste
GETeHEAD -
aggiunge un header utile al debug
Header di debug
Nel browser o con curl puoi vedere:
Significa che la risposta è arrivata dalla cache.
Oppure:
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:
-
ogni visita genera bootstrap PHP
-
carica plugin e tema
-
interroga il database
-
costruisce la pagina
Con FastCGI Cache:
-
la prima visita genera la pagina
-
le successive vengono servite da Nginx quasi come file statici
Impatto pratico
Su server piccoli può significare:
-
più utenti contemporanei
-
CPU molto più bassa
-
TTFB migliore
-
meno timeout
Quando la cache diventa un problema
La cache accelera, ma va gestita bene.
Problemi tipici
-
utente vede contenuti vecchi
-
carrello o login memorizzati erroneamente
-
pagine personalizzate servite ad altri utenti
-
invalidazione non corretta dopo aggiornamenti
Per questo si escludono dalla cache:
-
cookie di sessione
-
area admin
-
checkout
-
pagine utente
Esempio:
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
-
OPcache: migliora PHP
-
Redis: migliora l’applicazione
-
FastCGI Cache: scarica il lavoro da PHP
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:
-
esegue PHP
-
legge configurazioni
-
carica framework
-
interroga il DB
-
renderizza HTML
Con ottimizzazione corretta
-
OPcache velocizza il parsing del codice
-
Redis memorizza categorie e prodotti richiesti spesso
-
FastCGI Cache serve pagine pubbliche già pronte
-
PHP-FPM gestisce meglio i processi residui
Risultato
-
meno carico sul database
-
meno RAM sprecata
-
risposta più rapida
-
migliore scalabilità
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.