# Gestire versioni PHP e impostazioni PHP-FPM su un server

> Installa più versioni PHP affiancate, scegli quella predefinita per riga di comando e nuovi siti, regola memoria, upload e processi PHP-FPM e applica le patch.

La pagina **PHP** di un server elenca le versioni PHP installate. Vimonto Deploy installa PHP dal repository ondrej/php, quindi più versioni possono girare affiancate: ogni versione ha il proprio servizio PHP-FPM e le proprie impostazioni, e ogni sito sceglie la versione su cui gira. Da questa pagina installi e rimuovi versioni, scegli la versione predefinita, modifichi le impostazioni PHP più comuni e installi le patch release.

La pagina è disponibile su app server, web server e worker server, i [tipi di server](https://ops.vimonto.com/docs/it/servers/server-types) che eseguono PHP.

![La pagina PHP di un server con PHP 8.5 e 8.4 installati, i badge delle versioni predefinite e le impostazioni](https://ops.vimonto.com/docs-media/it/server-php.webp?v=161e760d "Versioni PHP su un server")

## Quali versioni PHP puoi installare?

Vimonto Deploy offre PHP **8.5**, **8.4**, **8.3**, **8.2** e **8.1**. Un nuovo server riceve la versione che hai scelto quando l'hai [creato](https://ops.vimonto.com/docs/it/servers/create-a-server), e quella versione parte come predefinita sia per la riga di comando sia per i nuovi siti.

Ogni versione viene installata con lo stesso set di estensioni:

| Estensioni |
| --- |
| bcmath, cli, curl, fpm, gd, igbinary, imagick, intl, mbstring, memcached, msgpack, mysql, pgsql, readline, redis, soap, sqlite3, xml, zip |

La prima installazione mette anche Composer sul server, dopo aver verificato l'installer con la sua firma pubblicata.

## Installare una nuova versione PHP

1. Apri il server e scegli **PHP** nella barra laterale.
2. Clicca su **Installa nuova versione** e scegli una versione dal menu. Il menu elenca solo le versioni non ancora presenti sul server.
3. Conferma con **Installa**.

L'installazione richiede qualche minuto. La versione appare come **Aggiunta in corso** mentre il task è in esecuzione e puoi seguirlo nella pagina [attività](https://ops.vimonto.com/docs/it/organization/activity). I siti esistenti continuano a usare la propria versione: installarne una nuova non cambia nulla per loro.

Se l'installazione non riesce, la riga mostra **Non riuscito** e un pulsante **Riprova**. Ogni passaggio si può eseguire di nuovo senza rischi.

> [!NOTE]
> Per modificare qualsiasi cosa in questa pagina ti serve il permesso di gestire i server (vedi [membri e ruoli](https://ops.vimonto.com/docs/it/organization/members-and-roles)), e il server deve essere attivo.

## Cosa sono la versione predefinita da riga di comando e quella per i nuovi siti?

Ogni server ha due versioni predefinite, mostrate come badge accanto alla versione:

- **Riga di comando**: la versione che viene eseguita quando tu o uno script digitate `php` sul server, ad esempio nel [terminale](https://ops.vimonto.com/docs/it/servers/terminal), nei [job pianificati](https://ops.vimonto.com/docs/it/servers/scheduler) e nei [processi](https://ops.vimonto.com/docs/it/servers/processes) che chiamano `php`. Vimonto Deploy la imposta con `update-alternatives`.
- **Nuovi siti**: la versione preselezionata quando [crei un sito](https://ops.vimonto.com/docs/it/sites/create-a-site) su questo server. Non cambia i siti già esistenti.

Per cambiare una versione predefinita, apri il menu delle azioni (**⋯**) di una versione e scegli **Predefinito da riga di comando** o **Predefinito per i nuovi siti**. La versione da riga di comando esegue un breve task sul server; quella per i nuovi siti viene salvata subito.

Per spostare un sito esistente su un'altra versione, cambia la sua versione PHP nelle [impostazioni del sito](https://ops.vimonto.com/docs/it/sites/site-settings).

## Modificare le impostazioni PHP

Clicca su **Impostazioni** accanto a una versione per modificarne le impostazioni più comuni. Ogni versione ha i propri valori, e **Applica** li scrive sul server e ricarica PHP-FPM.

| Impostazione | Predefinito | Intervallo | Cosa fa |
| --- | --- | --- | --- |
| **Limite di memoria (MB)** | 512 | da 64 a 16384 | La memoria massima che una richiesta può usare (`memory_limit`). |
| **Upload massimo (MB)** | 64 | da 1 a 4096 | La dimensione massima di un upload e del corpo di una richiesta (`upload_max_filesize` e `post_max_size`). Vale anche per Nginx. |
| **Tempo massimo di esecuzione (secondi)** | 60 | da 5 a 3600 | Per quanto tempo può girare una richiesta (`max_execution_time`). Dopo, PHP-FPM interrompe la richiesta. |
| **Max. variabili di input** | 1000 | da 1000 a 100000 | Quanti campi di un modulo può avere una richiesta (`max_input_vars`). I moduli grandi, come in WordPress o Magento, ne richiedono di più. |
| **Processi PHP-FPM** | 5 | da 2 a 500 | Quante richieste PHP gestisce contemporaneamente (`pm.max_children`). |
| **OPcache** | On | On o off | Mette in cache il codice PHP compilato. Più veloce, e quasi sempre utile in produzione. |

Queste impostazioni valgono per PHP-FPM, che serve le tue richieste web. La riga di comando usa una propria configurazione con un limite di memoria di 1 GB, così i comandi Artisan lunghi e le installazioni Composer non sono limitati dal valore web.

### Di quanti processi PHP-FPM hai bisogno?

Ogni processo PHP-FPM gestisce una richiesta alla volta e può usare fino al limite di memoria. Una regola semplice: il numero di processi moltiplicato per la memoria tipica di una richiesta deve stare nella memoria libera del server, accanto al database e agli altri servizi. Se le richieste si accodano mentre il server ha ancora memoria e CPU a disposizione, aumenta il numero; se il server esaurisce la memoria, abbassalo oppure abbassa il limite di memoria. La pagina [monitoring](https://ops.vimonto.com/docs/it/servers/monitoring) mostra memoria e carico nel tempo.

Le impostazioni dei processi di riserva del pool seguono il numero che scegli, quindi imposti solo il massimo.

> [!TIP]
> Quando aumenti **Upload massimo (MB)**, Vimonto Deploy aumenta anche il `client_max_body_size` di Nginx sul server, così gli upload grandi non vengono rifiutati da Nginx prima che PHP li veda.

### Le impostazioni valgono anche per i siti isolati?

In parte. Un [sito isolato](https://ops.vimonto.com/docs/it/sites/create-a-site) ha il proprio pool PHP-FPM, che gira con il proprio utente Linux. Limite di memoria, dimensione degli upload, tempo di esecuzione, variabili di input e OPcache valgono anche per lui, perché sono impostazioni PHP della versione. Il numero di **Processi PHP-FPM** vale solo per il pool condiviso; il pool di un sito isolato avvia i processi su richiesta, fino a 10.

## Aggiornare all'ultima patch release

Apri il menu delle azioni (**⋯**) di una versione e scegli **Aggiorna all'ultima patch**. Vimonto Deploy aggiorna solo i pacchetti di quella versione (ad esempio da 8.4.11 a 8.4.12), poi riavvia il suo servizio PHP-FPM. Le patch release contengono correzioni di sicurezza e di bug, non nuove funzionalità del linguaggio.

I server installano anche gli aggiornamenti di sicurezza in automatico, quindi questa azione serve soprattutto quando ti occorre una correzione subito.

## Rimuovere una versione PHP

Apri il menu delle azioni (**⋯**), scegli **Rimuovi** e conferma. Vimonto Deploy ferma il servizio PHP-FPM della versione, rimuove i suoi pacchetti ed elimina la sua configurazione.

Non puoi rimuovere una versione che è quella predefinita da riga di comando o per i nuovi siti: prima rendi predefinita un'altra versione.

> [!WARNING]
> I siti che usano ancora la versione smetteranno di funzionare. Spostali su un'altra versione nelle loro [impostazioni del sito](https://ops.vimonto.com/docs/it/sites/site-settings) prima di rimuoverla.

## Domande frequenti

### Come aumento il limite di upload di PHP?

Apri **PHP**, clicca su **Impostazioni** accanto alla versione usata dal tuo sito, aumenta **Upload massimo (MB)** e clicca su **Applica**. Vimonto Deploy modifica sia i limiti di upload e post di PHP sia il limite del corpo della richiesta di Nginx.

### Siti diversi sullo stesso server possono usare versioni PHP diverse?

Sì. Installa tutte le versioni che ti servono nella pagina **PHP**, poi scegli la versione per ogni sito quando lo crei o in seguito nelle sue impostazioni.

### Perché `php -v` sul server mostra una versione diversa da quella del mio sito?

La riga di comando usa la versione predefinita **Riga di comando**, mentre ogni sito usa la propria versione tramite PHP-FPM. Rendi la versione del sito quella predefinita da riga di comando, oppure chiama direttamente la versione, ad esempio `php8.4 artisan migrate`.

### Posso modificare php.ini a mano?

Vimonto Deploy scrive le sue impostazioni in `/etc/php/{version}/fpm/conf.d/99-vimonto.ini` e sovrascrive quel file quando clicchi su **Applica**. Le modifiche ad altri file in `/etc/php` restano intatte, ma le impostazioni in `99-vimonto.ini` hanno la precedenza sulla maggior parte di esse.
