# SAPI spiegata: come PHP dialoga con il server web

> PHP SAPI spiegata: che cosa significano fpm-fcgi, apache2handler, cgi-fcgi e cli, come verificare la modalità e perché determina rischio e riavvio.

Fonte: https://phpsos.de/it/php/sapi-erklaert/  
Stato: 25/10/2026  
Fornitore: PHP SOS, Assistenza di emergenza PHP e sicurezza dei server. Assistenza immediata su WhatsApp: https://wa.me/491736494914?text=Buongiorno%20PHP%20SOS%2C%20abbiamo%20bisogno%20di%20aiuto%20con%20il%20nostro%20server%20PHP.%20Azienda%3A%20%E2%80%A6%20Sito%20web%3A%20%E2%80%A6

**In breve:** SAPI sta per Server Application Programming Interface, l'interfaccia con cui PHP dialoga con il proprio ambiente. Le SAPI tipiche sono `fpm-fcgi` (PHP-FPM), `apache2handler` (mod_php), `cgi-fcgi` (php-cgi), `litespeed` e `cli` per la riga di comando. La SAPI determina come arrivano le richieste, quale php.ini vale e quali processi vanno riavviati dopo un aggiornamento. Con PHP2Shell da essa dipende perfino la classificazione del rischio.

## Che cos'è una SAPI?

PHP stesso è un programma che esegue codice. Per poter consegnare pagine web ha bisogno di un collegamento con un server web, con la riga di comando o con un'altra applicazione. Questo collegamento è la SAPI. Riceve i dati della richiesta, li passa alla [Zend Engine](https://phpsos.de/it/php/zend-engine/) e restituisce l'output.

Si può immaginare la SAPI come una spina: il motore resta lo stesso, ma a seconda della spina si adatta ad Apache, a Nginx tramite FastCGI, a LiteSpeed o al terminale. Ogni variante ha punti di forza, percorsi di configurazione e insidie propri.

La SAPI decide soprattutto tre aspetti che contano nella quotidianità:

1. **Modello di processo:** PHP gira nel server web, come servizio a sé con worker permanenti o come processo di breve durata per ogni chiamata?
2. **Configurazione:** quale php.ini viene letto e dove possono stare impostazioni aggiuntive, ad esempio in `.htaccess`, in un `.user.ini` o nel pool FPM?
3. **Permessi e separazione:** con quale utente gira il codice e più siti web si possono separare l'uno dall'altro?

Nei pannelli di hosting le SAPI compaiono con altri nomi. Plesk parla ad esempio di gestori PHP come «FPM application», «FastCGI application» o «Apache module». Si intendono le stesse modalità di esecuzione descritte in questa pagina. Nel dubbio aiuta il file di verifica più sotto, che mostra il nome effettivo della SAPI.

## Quali SAPI di PHP esistono?

Il manuale PHP indica per `php_sapi_name()` tra l'altro questi valori restituiti: `apache`, `apache2handler`, `cgi` (fino a PHP 5.3), `cgi-fcgi`, `cli`, `cli-server`, `embed`, `fpm-fcgi`, `litespeed` e `phpdbg`. L'elenco non è espressamente esaustivo.

| Nome SAPI | Modalità di esecuzione | Uso tipico | Modello di processo |
|---|---|---|---|
| `fpm-fcgi` | PHP-FPM | Nginx, Apache con `proxy_fcgi`, pannelli di hosting | servizio a sé con pool di worker |
| `apache2handler` | mod_php | server Apache meno recenti, semplici immagini Docker | PHP nel processo Apache |
| `cgi-fcgi` | php-cgi | installazioni datate, alcuni setup Windows | un processo per richiesta o FastCGI |
| `litespeed` | LSAPI | server web LiteSpeed, molti hoster condivisi | processi PHP propri |
| `cli` | riga di comando | cronjob, Composer, script di manutenzione | un processo per chiamata |
| `cli-server` | server web integrato | solo sviluppo locale (`php -S`) | un server di sviluppo |
| `embed` | incorporato | PHP in altri programmi | dipende dal programma |
| `phpdbg` | debugger | ricerca degli errori | interattivo |

FrankenPHP è un moderno server di applicazioni che incorpora PHP direttamente. Anch'esso è interessato da PHP2Shell e ha percorsi di aggiornamento propri; dettagli in [Mettere in sicurezza FrankenPHP](https://phpsos.de/it/server/frankenphp/).

## Come verificare la SAPI del Suo server

La SAPI di un sito web la si scopre solo tramite il server web, non dalla riga di comando. Basta un piccolo file di verifica:

```php
<?php
// sapi-check.php: dopo la chiamata cancellare subito
header('Content-Type: text/plain');
echo PHP_SAPI, "\n", PHP_VERSION, "\n", php_ini_loaded_file(), "\n";
```

Da riga di comando si possono rilevare in sola lettura le varianti e i servizi installati:

```bash
php -r 'echo PHP_SAPI, PHP_EOL;'          # sempre "cli"
ls /usr/sbin/php-fpm* 2>/dev/null           # versioni FPM installate
systemctl list-units --type=service | grep -i -E "php|lsws|apache2|httpd"
apachectl -M 2>/dev/null | grep -i php     # mod_php caricato?
```

## Perché ogni SAPI può avere il proprio php.ini

Secondo il manuale PHP, PHP cerca prima un file `php-SAPI.ini`, ad esempio `php-cli.ini`, e solo dopo `php.ini`. Distribuzioni come Debian e Ubuntu vanno oltre e creano cartelle proprie per ogni SAPI, ad esempio `/etc/php/8.3/fpm/` e `/etc/php/8.3/cli/`.

Cambia anche il momento: con i moduli del server, secondo il manuale PHP legge la configurazione una sola volta all'avvio del server web, con CGI e CLI a ogni chiamata. Chi modifica un'impostazione deve quindi sapere quale SAPI è interessata. Approfondimenti in [Il php.ini spiegato](https://phpsos.de/it/php/php-ini-erklaert/).

## SAPI e sicurezza: che cosa ha mostrato PHP2Shell

Secondo le segnalazioni, PHP2Shell interessa PHP-FPM, Apache con mod_php, php-cgi, FrankenPHP e LiteSpeed. Il team PHP classifica il rischio più alto per mod_php, perché lì è stato dimostrato un exploit prima che giri il codice dell'applicazione. I motivi sono in [Perché mod_php porta il rischio più alto](https://phpsos.de/it/php2shell/mod-php-risiko/).

Per l'esercizio la SAPI significa soprattutto una cosa: determina che cosa va riavviato dopo l'aggiornamento.

1. **PHP-FPM:** tutti i pool e i worker di ogni versione installata
2. **mod_php:** l'intero servizio Apache, non un semplice reload
3. **php-cgi e setup FastCGI:** tutti i processi PHP rimasti
4. **LiteSpeed:** i processi PHP del server web secondo le istruzioni del fornitore
5. **CLI:** nessun processo permanente, ma aggiornare anche il pacchetto, perché le verifiche siano corrette

A medio termine conviene abbandonare mod_php. Il manuale PHP raccomanda per le nuove installazioni Apache PHP-FPM con `mod_proxy_fcgi`. Le basi sono descritte in [PHP-FPM spiegato](https://phpsos.de/it/php/php-fpm-erklaert/).

## Come aiuta concretamente PHP SOS?

- **Rilevare le SAPI:** accertiamo per ogni server quali modalità di esecuzione e versioni di PHP siano effettivamente attive.
- **Riavviare correttamente:** tramite il [servizio di patch PHP](https://phpsos.de/it/leistungen/php-patch-service/) aggiorniamo ogni SAPI e documentiamo il riavvio di tutti i processi.
- **Assegnare la configurazione:** mostriamo quale php.ini e quali impostazioni del pool valgono per il Suo sito web.
- **Pianificare il passaggio:** dove gira mod_php o php-cgi pianifichiamo e testiamo il passaggio a PHP-FPM.


## Domande frequenti

**Come scopro quale SAPI usa il mio sito web?**  
Nel modo più affidabile con un file di verifica depositato per breve tempo, che mostra PHP_SAPI o php_sapi_name(), richiamato tramite il server web. Da riga di comando ottiene sempre cli, il che non dice nulla sul sito web. Poi cancelli subito il file di verifica.

**Qual è la SAPI più sicura?**  
Nessuna è sicura di per sé. PHP-FPM offre però il maggior numero di strumenti di separazione: pool propri, utenti propri e impostazioni bloccate per ogni sito web. Il manuale PHP consiglia espressamente, per le nuove installazioni Apache, PHP-FPM al posto di mod_php.

**La versione a riga di comando di PHP è interessata da PHP2Shell?**  
Le segnalazioni note citano PHP-FPM, mod_php, php-cgi, FrankenPHP e LiteSpeed. La CLI non elabora richieste dalla rete. Di solito però proviene dallo stesso repository di pacchetti e andrebbe sempre aggiornata insieme, se non altro perché i comandi di verifica mostrino lo stato corretto.

**Un server può usare più SAPI contemporaneamente?**  
Sì, è anzi la norma. Quasi ogni server ha, accanto alla SAPI web, la CLI per i cronjob e la manutenzione. Spesso girano in parallelo anche più versioni di PHP-FPM. Ciascuna va aggiornata e riavviata singolarmente.

## Fonti

- [Manuale PHP: php_sapi_name()](https://www.php.net/manual/en/function.php-sapi-name.php)
- [Manuale PHP: file di configurazione](https://www.php.net/manual/en/configuration.file.php)
- [Manuale PHP: Apache 2 su Unix](https://www.php.net/manual/en/install.unix.apache2.php)
- [php.net: avvisi di sicurezza](https://www.php.net/)
