Sotto il cofano: server web, PHP e database
Modulo 1: Come funziona WordPress · Tempo di lettura: 8 minuti
Obiettivo della lezione: dopo questa lezione sarà in grado di spiegare passo per passo come una richiesta di pagina diventa, in WordPress, una pagina HTML, e dove una cache accorcia questo percorso.
Concetti chiave: server web (LiteSpeed, Apache, nginx), PHP, MariaDB/MySQL, query, index.php, gerarchia dei template, dinamico vs statico, TTFB
Una pagina statica e una pagina dinamica
In un sito web statico, ogni pagina è un file già pronto sul server. Il server web prende il file e lo invia. È veloce e semplice, ma ogni modifica richiede un nuovo file.
WordPress è dinamico: la pagina esiste solo nel momento in cui qualcuno la richiede. Non esiste un file contact.html. C'è un testo nel database, un tema con dei template e una serie di codice PHP che unisce i due elementi. Questo offre comodità (può modificare il testo nel Suo browser), ma richiede del lavoro di elaborazione a ogni visita. Comprendendo questo lavoro di elaborazione, capirà anche più avanti perché un sito è lento, perché la cache fa così tanta differenza e perché un aggiornamento di PHP può rompere qualcosa.
Il percorso di una richiesta di pagina
Supponga che un visitatore apra https://example.com/contact/. Ecco cosa succede:
- DNS: il browser cerca l'indirizzo IP di
example.com(veda il corso DNS). Stabilisce una connessione sicura con quell'indirizzo. - Server web: sul server gira un server web, per esempio LiteSpeed, Apache o nginx. Questo riceve la richiesta. Se esiste un file o una cartella reale con quel nome (un'immagine, un foglio di stile), lo invia direttamente. In caso contrario, vale la regola contenuta nel file
.htaccess(per LiteSpeed e Apache) o nella configurazione di nginx: "invia tutto ciò che non esiste aindex.php". - PHP:
index.phpè un file PHP. Il server web lo fa eseguire da PHP, il linguaggio di programmazione in cui è scritto WordPress. PHP carica primawp-config.php(le impostazioni, con i dati del database), poi il resto di WordPress, poi tutti i plugin attivi e il tema attivo. - Database: WordPress verifica quale contenuto corrisponde a
/contact/e interroga il database (MariaDB o MySQL): quale pagina ha lo slugcontact, quali sono le impostazioni del sito, quale menu le appartiene? Questa interrogazione si chiama query. Una pagina semplice richiede già decine di query; con i plugin possono diventare centinaia. - Tema: WordPress sceglie quale template del tema formatta la pagina. Questo avviene secondo la gerarchia dei template: per una pagina con slug
contact, WordPress cerca prima un templatepage-contact, poipage-<id>(il numero della pagina), poipage, poisingulare infineindex. Il primo che esiste vince. - HTML restituito: il risultato è una pagina HTML che PHP fornisce al server web, e il server web al browser.
- Il browser legge l'HTML e poi recupera anche i fogli di stile, gli script, i caratteri e le immagini. Questi sono file normali, quindi arrivano direttamente dal server web (o da una cache).
Tra il passaggio 2 e il passaggio 6 c'è il tempo di cui il server ha bisogno per creare la pagina. Lo vede riflesso nel TTFB (time to first byte): il tempo tra la richiesta e il primo byte della risposta. Su un sito ben configurato, questo tempo è ben al di sotto di un secondo. Nel modulo 6 lo misurerà Lei stesso.
Perché ogni plugin conta
Al passaggio 3 vengono caricati tutti i plugin attivi, a ogni richiesta. Anche se quel plugin non fa nulla su questa pagina. Un plugin per una galleria fotografica viene quindi caricato anche quando qualcuno apre la Sua pagina di contatto. Ogni plugin può eseguire query aggiuntive, caricare codice aggiuntivo e aggiungere script aggiuntivi alla pagina.
Questo spiega due cose che incontrerà più spesso in questo corso:
- Meno plugin è di solito più veloce. Non perché il numero in sé conti, ma perché ogni plugin può svolgere del lavoro a ogni richiesta.
- Un plugin rotto può bloccare l'intero sito. Se al passaggio 3 qualcosa va storto (per esempio un plugin che non funziona con la nuova versione di PHP), PHP non arriva mai al passaggio 6. Il visitatore riceve una pagina bianca o il messaggio "Si è verificato un errore critico su questo sito web" (lezione 5.4).
Da dove provengono PHP e il database
PHP e il database girano sul server del Suo hosting provider. Di solito sceglie Lei stesso la versione di PHP nel pannello di controllo (in DirectAdmin questa opzione si chiama Select PHP version, veda la lezione 8.4). Il database viene creato durante l'installazione; spesso lo fa per Lei il programma di installazione (lezione 2.2).
Alcune cose da ricordare:
- Versione di PHP: ogni nuova versione di PHP è più veloce e più sicura, ma il codice vecchio può interrompersi. wordpress.org attualmente consiglia PHP 8.3 o superiore (dati aggiornati a novembre 2026).
- Database: wordpress.org consiglia MariaDB 10.11 o superiore, oppure MySQL 8.0 o superiore. MariaDB è una derivazione di MySQL; per WordPress non fa alcuna differenza.
- Il database si trova di solito sullo stesso server (
DB_HOSTè alloralocalhost). Con hosting più grandi può trovarsi su un server separato.
Cache: accorciare il percorso
Se cento visitatori richiedono la stessa pagina di contatto, senza cache WordPress la ricrea cento volte. Ogni volta le stesse query, lo stesso template, lo stesso HTML. Una cache di pagina conserva l'HTML dopo la prima volta. Il visitatore successivo riceve la versione salvata: i passaggi da 3 a 6 vengono saltati.
Zonder cache: browser > webserver > PHP > WordPress + plugins > database > thema > HTML
Met cache: browser > webserver > opgeslagen HTMLEcco perché la cache offre il maggior guadagno di velocità (lezione 6.2). Questo spiega anche un fraintendimento comune: "ho modificato il testo, ma vedo ancora la versione vecchia." In quel caso Lei vede una versione salvata; dopo aver svuotato la cache vedrà la nuova versione.
Non tutto può provenire da una cache. Un amministratore collegato, un carrello della spesa o una pagina di pagamento sono diversi per ogni visitatore. Un buon plugin di cache li esclude.
Intestazioni: cosa Le comunica il server
Ogni risposta di un server web inizia con delle intestazioni (header), prima dell'HTML. Non le vede sulla pagina, ma può vederle negli strumenti di sviluppo del Suo browser (F12, scheda Network/Rete, aggiorni la pagina, clicchi sulla prima richiesta). Un esempio:
HTTP/2 200
server: LiteSpeed
content-type: text/html; charset=UTF-8
link: <https://example.com/wp-json/>; rel="https://api.w.org/"
x-litespeed-cache: hitserverindica quale server web risponde.linkconwp-jsonrivela che si tratta di WordPress.x-litespeed-cache: hitsignifica che questa pagina proviene dalla cache di LiteSpeed. Altre cache usano nomi diversi, comex-cache: HIToppurecf-cache-status: HITcon Cloudflare.
Non deve imparare a memoria queste righe. Ma chi sa leggerle può individuare da solo molti problemi.
Riepilogo
- WordPress crea ogni pagina nel momento della richiesta: server web, PHP, plugin, database, tema, HTML.
- A ogni richiesta vengono caricati tutti i plugin attivi; un plugin rotto può bloccare l'intero sito.
- La gerarchia dei template determina quale template del tema formatta una pagina.
- Una cache di pagina salta il lavoro di elaborazione fornendo HTML salvato. Gli utenti collegati e i carrelli della spesa non devono trovarsi in quella cache.
- Le intestazioni di una risposta indicano quale server web risponde e se la pagina proviene da una cache.
Quiz
Esercizio
Esercizio A1.2: Legga le intestazioni del Suo sito. Apra il Suo sito (oppure wordpress.org) con gli strumenti di sviluppo del Suo browser (F12, scheda Network/Rete, aggiorni la pagina, clicchi sulla prima richiesta). Indichi quale server web compare nell'intestazione server (oppure "nessuno" se non è presente) e se esiste un'intestazione che indica che la pagina proviene da una cache (quale nome e quale valore). Il programma richiede la stessa pagina e confronta i risultati.
Per approfondire
Questi articoli descrivono i passaggi nei pannelli di WebOké; in altri pannelli funzionano in modo simile.
- Guida DirectAdmin 1.9: Concetti spiegati: dominio, sottodominio, puntatore, DNS, cassetta postale e database
- Guida DirectAdmin 14.1: Scegliere la versione di PHP (Select PHP version)
- Corso gratuito DNS 1.4: Il viaggio di una richiesta DNS
- Gerarchia dei template (developer.wordpress.org, in inglese): https://developer.wordpress.org/themes/basics/template-hierarchy/
