# PHP-versies en PHP-FPM-instellingen beheren op een server

> Installeer meerdere PHP-versies naast elkaar, kies de standaard voor opdrachtregel en nieuwe sites, stel geheugen, uploads en PHP-FPM in en installeer patches.

De pagina **PHP** van een server toont de PHP-versies die erop geïnstalleerd zijn. Vimonto Deploy installeert PHP uit de ondrej/php-repository, zodat meerdere versies naast elkaar kunnen draaien: elke versie heeft een eigen PHP-FPM-service en eigen instellingen, en elke site kiest de versie waarop hij draait. Op deze pagina installeer en verwijder je versies, kies je welke versie de standaard is, wijzig je de meestgebruikte PHP-instellingen en installeer je patchreleases.

De pagina is beschikbaar op app-servers, webservers en workerservers, de [servertypes](https://ops.vimonto.com/docs/nl/servers/server-types) die PHP draaien.

![De pagina PHP van een server met PHP 8.5 en 8.4 geïnstalleerd, hun standaardlabels en instellingen](https://ops.vimonto.com/docs-media/nl/server-php.webp?v=161e760d "PHP-versies op een server")

## Welke PHP-versies kun je installeren?

Vimonto Deploy biedt PHP **8.5**, **8.4**, **8.3**, **8.2** en **8.1**. Een nieuwe server krijgt de versie die je koos toen je [hem aanmaakte](https://ops.vimonto.com/docs/nl/servers/create-a-server), en die versie is in het begin de standaard voor zowel de opdrachtregel als nieuwe sites.

Elke versie wordt geïnstalleerd met dezelfde set extensies:

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

Bij de eerste installatie komt ook Composer op de server, nadat de installer is gecontroleerd tegen zijn gepubliceerde handtekening.

## Een nieuwe PHP-versie installeren

1. Open de server en kies **PHP** in de zijbalk.
2. Klik op **Nieuwe versie installeren** en kies een versie uit het menu. Het menu toont alleen versies die nog niet op de server staan.
3. Bevestig met **Installeren**.

Installeren duurt een paar minuten. De versie staat op **Wordt toegevoegd** zolang de taak loopt, en je kunt die volgen op de pagina [activiteit](https://ops.vimonto.com/docs/nl/organization/activity). Bestaande sites blijven hun eigen versie gebruiken: een nieuwe installeren verandert voor hen niets.

Mislukt de installatie, dan toont de rij **Mislukt** en een knop **Opnieuw**. Elke stap kan veilig opnieuw worden uitgevoerd.

> [!NOTE]
> Om iets op deze pagina te wijzigen heb je het recht nodig om servers te beheren (zie [leden en rollen](https://ops.vimonto.com/docs/nl/organization/members-and-roles)), en de server moet actief zijn.

## Wat zijn de standaard voor de opdrachtregel en de standaard voor nieuwe sites?

Elke server heeft twee standaarden, die als labels naast de versie staan:

- **Opdrachtregel**: de versie die draait wanneer jij of een script `php` typt op de server, bijvoorbeeld in de [terminal](https://ops.vimonto.com/docs/nl/servers/terminal), in [geplande taken](https://ops.vimonto.com/docs/nl/servers/scheduler) en in [processen](https://ops.vimonto.com/docs/nl/servers/processes) die `php` aanroepen. Vimonto Deploy stelt deze in met `update-alternatives`.
- **Nieuwe sites**: de versie die vooraf is geselecteerd wanneer je [een site aanmaakt](https://ops.vimonto.com/docs/nl/sites/create-a-site) op deze server. Bestaande sites veranderen hierdoor niet.

Om een standaard te wijzigen, open je het actiemenu (**⋯**) van een versie en kies je **Standaard op de opdrachtregel** of **Standaard voor nieuwe sites**. De standaard voor de opdrachtregel voert een korte taak uit op de server; de standaard voor nieuwe sites wordt meteen opgeslagen.

Om een bestaande site naar een andere versie te verhuizen, wijzig je de PHP-versie in de [site-instellingen](https://ops.vimonto.com/docs/nl/sites/site-settings).

## PHP-instellingen wijzigen

Klik op **Instellingen** naast een versie om de meestgebruikte instellingen te wijzigen. Elke versie heeft eigen waarden, en **Toepassen** schrijft ze naar de server en herlaadt PHP-FPM.

| Instelling | Standaard | Bereik | Wat het doet |
| --- | --- | --- | --- |
| **Geheugenlimiet (MB)** | 512 | 64 tot 16384 | Het meeste geheugen dat één request mag gebruiken (`memory_limit`). |
| **Maximale upload (MB)** | 64 | 1 tot 4096 | De grootste upload en request body (`upload_max_filesize` en `post_max_size`). Geldt ook voor Nginx. |
| **Maximale uitvoertijd (seconden)** | 60 | 5 tot 3600 | Hoe lang één request mag lopen (`max_execution_time`). Daarna stopt PHP-FPM het request. |
| **Max. invoervariabelen** | 1000 | 1000 tot 100000 | Hoeveel formuliervelden een request mag hebben (`max_input_vars`). Grote formulieren, zoals in WordPress of Magento, hebben er meer nodig. |
| **PHP-FPM-processen** | 5 | 2 tot 500 | Hoeveel requests PHP tegelijk afhandelt (`pm.max_children`). |
| **OPcache** | Aan | Aan of uit | Slaat gecompileerde PHP-code op in een cache. Sneller, en in productie bijna altijd gewenst. |

Deze instellingen gelden voor PHP-FPM, dat je webrequests afhandelt. De opdrachtregel gebruikt een eigen configuratie met een geheugenlimiet van 1 GB, zodat lange Artisan-commando's en Composer-installaties niet worden beperkt door de waarde voor het web.

### Hoeveel PHP-FPM-processen heb je nodig?

Elk PHP-FPM-proces handelt één request tegelijk af en kan tot de geheugenlimiet gebruiken. Een eenvoudige vuistregel: het aantal processen maal het gebruikelijke geheugen per request moet passen in het vrije geheugen van de server, naast de database en andere services. Lopen requests op in een wachtrij terwijl de server nog geheugen en CPU over heeft, verhoog dan het aantal; raakt de server door zijn geheugen heen, verlaag het dan of verlaag de geheugenlimiet. De pagina [monitoring](https://ops.vimonto.com/docs/nl/servers/monitoring) toont geheugen en belasting door de tijd.

De instellingen voor reserveprocessen van de pool volgen het aantal dat je kiest, dus je stelt alleen het maximum in.

> [!TIP]
> Wanneer je **Maximale upload (MB)** verhoogt, verhoogt Vimonto Deploy ook `client_max_body_size` van Nginx op de server, zodat grote uploads niet al door Nginx worden geweigerd voordat PHP ze ziet.

### Gelden de instellingen voor geïsoleerde sites?

Gedeeltelijk. Een [geïsoleerde site](https://ops.vimonto.com/docs/nl/sites/create-a-site) heeft een eigen PHP-FPM-pool, die draait als een eigen Linux-gebruiker. De geheugenlimiet, uploadgrootte, uitvoertijd, invoervariabelen en OPcache gelden er ook voor, omdat het PHP-instellingen van de versie zijn. Het aantal **PHP-FPM-processen** geldt alleen voor de gedeelde pool; de pool van een geïsoleerde site start processen wanneer nodig, tot maximaal 10.

## Bijwerken naar de nieuwste patchrelease

Open het actiemenu (**⋯**) van een versie en kies **Bijwerken naar nieuwste patch**. Vimonto Deploy werkt alleen de pakketten van die versie bij (bijvoorbeeld van 8.4.11 naar 8.4.12) en herstart daarna de PHP-FPM-service. Patchreleases bevatten beveiligings- en bugfixes, geen nieuwe taalfuncties.

Servers installeren beveiligingsupdates ook automatisch, dus deze actie is vooral handig wanneer je meteen een fix nodig hebt.

## Een PHP-versie verwijderen

Open het actiemenu (**⋯**), kies **Verwijderen** en bevestig. Vimonto Deploy stopt de PHP-FPM-service van de versie, verwijdert de pakketten en wist de configuratie.

Je kunt geen versie verwijderen die de standaard is op de opdrachtregel of voor nieuwe sites: maak eerst een andere versie de standaard.

> [!WARNING]
> Sites die de versie nog gebruiken, werken dan niet meer. Zet ze in hun [site-instellingen](https://ops.vimonto.com/docs/nl/sites/site-settings) over op een andere versie voordat je hem verwijdert.

## Veelgestelde vragen

### Hoe verhoog ik de PHP-uploadlimiet?

Open **PHP**, klik op **Instellingen** naast de versie die je site gebruikt, verhoog **Maximale upload (MB)** en klik op **Toepassen**. Vimonto Deploy wijzigt zowel de upload- en postlimiet van PHP als de limiet voor de request body van Nginx.

### Kunnen verschillende sites op één server verschillende PHP-versies gebruiken?

Ja. Installeer elke versie die je nodig hebt op de pagina **PHP** en kies daarna per site de versie, bij het aanmaken of later in de instellingen.

### Waarom toont `php -v` op de server een andere versie dan mijn site?

De opdrachtregel gebruikt de standaard voor de **Opdrachtregel**, terwijl elke site via PHP-FPM zijn eigen versie gebruikt. Maak de versie van de site de standaard op de opdrachtregel, of roep de versie direct aan, bijvoorbeeld `php8.4 artisan migrate`.

### Kan ik php.ini met de hand bewerken?

Vimonto Deploy schrijft zijn instellingen naar `/etc/php/{version}/fpm/conf.d/99-vimonto.ini` en overschrijft dat bestand wanneer je op **Toepassen** klikt. Wijzigingen in andere bestanden onder `/etc/php` blijven ongemoeid, maar instellingen in `99-vimonto.ini` gaan voor de meeste ervan.
