# Capire le estensioni PHP (extension)

> Estensioni PHP spiegate: extension core, bundled e PECL, extension e zend_extension, php -m e perché meno moduli significano più sicurezza.

Fonte: https://phpsos.de/it/php/php-erweiterungen/  
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:** le estensioni PHP (extension) sono moduli in C che aggiungono funzioni a PHP, ad esempio driver di database (PDO), cifratura (Sodium, OpenSSL) o la cache di bytecode OPcache. Il manuale PHP distingue estensioni core, bundled, external e PECL. Si caricano tramite `extension` o `zend_extension` nel php.ini. Ogni estensione gira nel processo PHP con i suoi permessi. Perciò vale: caricare solo ciò che serve e aggiornare insieme a PHP.

## Che cosa sono le extension di PHP?

Il nucleo di PHP, la [Zend Engine](https://phpsos.de/it/php/zend-engine/), può eseguire codice, ma molto di ciò di cui le applicazioni hanno bisogno si trova nelle estensioni. Sono scritte in C e vengono compilate stabilmente in PHP oppure caricate all'avvio come libreria condivisa (`.so` su Linux, `.dll` su Windows).

Importante per chi decide: le estensioni non sono plugin dell'applicazione, ma parte del runtime PHP. Le installa l'hoster o l'amministratore del server, non l'agenzia nel CMS. Se manca un'estensione, l'applicazione di solito segnala un errore durante l'installazione o l'aggiornamento.

Altrettanto importante è la distinzione dai pacchetti Composer. Composer installa librerie scritte in PHP che stanno nella cartella del progetto, ad esempio un pacchetto per la posta o per i PDF. Le estensioni invece sono codice compilato che viene caricato all'avvio di PHP e vale per tutte le applicazioni sul server. Molti pacchetti Composer presuppongono determinate estensioni e lo annotano nel loro `composer.json` con voci come `ext-intl` o `ext-sodium`. Chi vuole verificare se un progetto trova tutte le estensioni necessarie può eseguire `composer check-platform-reqs` nella cartella del progetto.

## Quali tipi di estensioni esistono?

Il manuale PHP assegna le estensioni a quattro gruppi:

| Gruppo | Significato secondo il manuale | Esempi dal manuale |
|---|---|---|
| Core | parte del nucleo di PHP, non disattivabile | Arrays, Date/Time, Hash, JSON, PCRE, SPL, Strings |
| Bundled | fornite con PHP | BC Math, Ctype, Fileinfo, Filter, GD, intl, mbstring, PDO, Sessions |
| External | fornite con PHP, richiedono librerie esterne | cURL, DOM, GMP, LDAP, OpenSSL, Sodium, Zip |
| PECL | disponibili tramite PECL, in parte con librerie esterne | APCu, Memcached, MongoDB, Yaml |

L'assegnazione può cambiare. Con PHP 8.4, secondo la pagina di rilascio, le estensioni IMAP, OCI8, PDO_OCI e pspell sono state tolte dalla dotazione di serie e spostate in PECL. Chi le usa ha bisogno dopo l'upgrade di un'installazione separata, che va a sua volta mantenuta.

## Come si caricano le estensioni?

Le estensioni condivise vengono caricate, secondo il manuale, tramite la direttiva `extension` nel php.ini; le estensioni Zend, che intervengono più a fondo nella engine, tramite `zend_extension`. Entrambe possono stare solo nel php.ini. La directory la stabilisce `extension_dir`, per cui il manuale raccomanda un percorso assoluto.

```ini
; estensioni normali
extension=pdo_mysql
extension=sodium
extension=intl

; estensione Zend: OPcache (caricare prima di Xdebug, se entrambi sono attivi)
zend_extension=opcache
```

Distribuzioni come Debian e Ubuntu creano per ogni estensione un piccolo file `.ini` proprio nella directory di scansione, ad esempio in `/etc/php/8.3/mods-available/`, e lo attivano per ogni SAPI con `phpenmod` e `phpdismod`. Come PHP legge questi file lo spiega [Il php.ini spiegato](https://phpsos.de/it/php/php-ini-erklaert/).

Le estensioni si installano di solito tramite la gestione dei pacchetti, ad esempio come pacchetto `php8.3-intl`. Le estensioni PECL si possono compilare con `pecl` o `phpize`. Secondo il manuale PECL è dichiarato obsoleto; si raccomanda il PHP Installer for Extensions (PIE). Chi compila PHP interamente da sé trova indicazioni in [Compilare PHP dal codice sorgente](https://phpsos.de/it/php/php-kompilieren/).

## Verificare le estensioni: quali sono davvero caricate?

I comandi seguenti sono di sola lettura. Tenga presente che la riga di comando può caricare estensioni diverse dal sito web.

```bash
php -m                              # moduli della CLI
php-fpm8.3 -m                       # moduli di PHP-FPM 8.3 (nome a seconda della distribuzione)
php --re sodium | head -n 5         # funzioni di un'estensione
php --ri opcache                    # configurazione di un'estensione
php -r 'var_dump(extension_loaded("intl"));'
```

Nel codice le applicazioni verificano con `extension_loaded()` se un'estensione è presente e con `get_loaded_extensions()` quali sono caricate:

```php
<?php
$benoetigt = ['pdo_mysql', 'mbstring', 'intl', 'sodium'];
$fehlend = array_diff($benoetigt, array_map('strtolower', get_loaded_extensions()));
echo $fehlend ? 'Fehlt: ' . implode(', ', $fehlend) : 'Alle Erweiterungen vorhanden';
```

## Estensioni e sicurezza: meno è meglio

Le estensioni girano nello stesso processo di PHP e con gli stessi permessi. Un errore in un'estensione può quindi pesare quanto un errore nel nucleo. Ne derivano quattro regole:

1. **Caricare solo ciò che serve.** Ogni estensione aggiuntiva amplia la superficie di attacco. Confronti il Suo elenco con i requisiti di sistema dell'applicazione.
2. **Aggiornare insieme a PHP.** Le estensioni fornite arrivano con l'aggiornamento di PHP. Le estensioni PECL e di terzi richiedono aggiornamenti propri e devono essere compatibili con la nuova versione di PHP.
3. **Strumenti di sviluppo non in produzione.** Debugger e profiler come Xdebug appartengono solo agli ambienti di sviluppo.
4. **Bloccare le funzioni in modo mirato.** Dove le estensioni portano funzioni per i comandi di sistema, aiuta [Usare correttamente disable_functions](https://phpsos.de/it/ratgeber/disable-functions/).

Con PHP2Shell le vulnerabilità si trovano nel nucleo di PHP, non in un'estensione. Disattivare moduli non le chiude; serve l'aggiornamento a 8.5.12, 8.4.27, 8.3.36 o 8.2.35 con riavvio di tutti i processi PHP. Dopo l'aggiornamento dovrebbe verificare che tutte le estensioni vengano caricate di nuovo, perché i moduli mancanti si notano spesso solo con determinate funzioni. Come tenere sotto controllo le dipendenze in modo duraturo lo descrive [Mantenere aggiornate le dipendenze](https://phpsos.de/it/blog/abhaengigkeiten-aktuell-halten/).

## Come aiuta concretamente PHP SOS?

- **Rilevare lo stato attuale:** elenchiamo per ogni SAPI tutte le estensioni caricate con provenienza e versione.
- **Fare pulizia:** confrontiamo l'elenco con il fabbisogno della Sua applicazione e, dopo un test, disattiviamo il superfluo.
- **Aggiornare:** nell'ambito dell'[hardening del server](https://phpsos.de/it/leistungen/server-haertung/) portiamo PHP e tutte le estensioni di terzi a uno stato mantenuto.
- **Verificare dopo gli aggiornamenti:** controlliamo che dopo ogni aggiornamento di PHP tutti i moduli necessari siano di nuovo caricati.


## Domande frequenti

**Qual è la differenza tra extension e zend_extension?**  
Con extension PHP carica le estensioni normali come i driver di database. Con zend_extension vengono caricate, secondo il manuale, estensioni Zend che intervengono più a fondo nella engine, ad esempio OPcache o Xdebug. Entrambe le direttive possono stare solo nel php.ini.

**Come vedo quali estensioni sono caricate?**  
Da riga di comando con php -m, per il sito web con la funzione get_loaded_extensions() in un file di verifica temporaneo oppure con php-fpm -m della rispettiva versione. Tenga presente che CLI e SAPI web possono caricare estensioni diverse.

**Che cosa sono PECL e PIE?**  
PECL è un elenco di estensioni PHP messe a disposizione tramite il sistema di pacchetti PEAR. Secondo il manuale PHP, PECL è dichiarato obsoleto; si raccomanda invece il PHP Installer for Extensions (PIE).

**Disattivare un'estensione chiude PHP2Shell?**  
No. Le vulnerabilità di PHP2Shell si trovano nel nucleo di PHP, non in un'estensione disattivabile. Meno estensioni riducono in generale la superficie di attacco, ma non sostituiscono l'aggiornamento a una versione corretta.

## Fonti

- [Manuale PHP: appartenenza delle estensioni](https://www.php.net/manual/en/extensions.membership.php)
- [Manuale PHP: installare le estensioni PECL](https://www.php.net/manual/en/install.pecl.intro.php)
- [Manuale PHP: impostazioni del core (extension)](https://www.php.net/manual/en/ini.core.php)
- [php.net: rilascio di PHP 8.4](https://www.php.net/releases/8.4/en.php)
