# PHP-Versionen und PHP-FPM-Einstellungen verwalten

> Installiere mehrere PHP-Versionen parallel, lege Standards für Kommandozeile und neue Sites fest, passe Speicher, Uploads und PHP-FPM an und spiele Patches ein.

Die Seite **PHP** eines Servers listet die darauf installierten PHP-Versionen. Vimonto Deploy installiert PHP aus dem Repository ondrej/php, sodass mehrere Versionen parallel laufen können: Jede Version hat einen eigenen PHP-FPM-Dienst und eigene Einstellungen, und jede Site wählt die Version, auf der sie läuft. Auf dieser Seite installierst und entfernst du Versionen, legst fest, welche Version Standard ist, änderst die wichtigsten PHP-Einstellungen und installierst Patch-Releases.

Die Seite gibt es auf App-Servern, Webservern und Worker-Servern, also den [Servertypen](https://ops.vimonto.com/docs/de/servers/server-types), auf denen PHP läuft.

![Die PHP-Seite eines Servers mit installiertem PHP 8.5 und 8.4, ihren Standard-Badges und Einstellungen](https://ops.vimonto.com/docs-media/de/server-php.webp?v=161e760d "PHP-Versionen auf einem Server")

## Welche PHP-Versionen kannst du installieren?

Vimonto Deploy bietet PHP **8.5**, **8.4**, **8.3**, **8.2** und **8.1** an. Ein neuer Server erhält die Version, die du beim [Erstellen](https://ops.vimonto.com/docs/de/servers/create-a-server) gewählt hast, und diese Version ist zunächst Standard für die Kommandozeile und für neue Sites.

Jede Version wird mit denselben Erweiterungen installiert:

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

Bei der ersten Installation kommt außerdem Composer auf den Server, nachdem der Installer gegen seine veröffentlichte Signatur geprüft wurde.

## Eine neue PHP-Version installieren

1. Öffne den Server und wähle in der Seitenleiste **PHP**.
2. Klicke auf **Neue Version installieren** und wähle eine Version aus dem Menü. Das Menü zeigt nur Versionen, die noch nicht auf dem Server sind.
3. Bestätige mit **Installieren**.

Die Installation dauert ein paar Minuten. Während der Job läuft, steht die Version auf **Wird hinzugefügt**, und du kannst ihn auf der Seite [Aktivität](https://ops.vimonto.com/docs/de/organization/activity) verfolgen. Bestehende Sites behalten ihre eigene Version: Eine neue Installation ändert für sie nichts.

Schlägt die Installation fehl, zeigt die Zeile **Fehlgeschlagen** und eine Schaltfläche **Erneut versuchen**. Jeder Schritt kann gefahrlos erneut ausgeführt werden.

> [!NOTE]
> Für jede Änderung auf dieser Seite brauchst du die Berechtigung, Server zu verwalten (siehe [Mitglieder und Rollen](https://ops.vimonto.com/docs/de/organization/members-and-roles)), und der Server muss aktiv sein.

## Was bedeuten der Standard für die Kommandozeile und der für neue Sites?

Jeder Server hat zwei Standards, die als Badges neben der Version stehen:

- **Kommandozeile**: die Version, die läuft, wenn du oder ein Skript auf dem Server `php` eingibt, etwa im [Terminal](https://ops.vimonto.com/docs/de/servers/terminal), in [geplanten Jobs](https://ops.vimonto.com/docs/de/servers/scheduler) und in [Prozessen](https://ops.vimonto.com/docs/de/servers/processes), die `php` aufrufen. Vimonto Deploy setzt sie mit `update-alternatives`.
- **Neue Sites**: die Version, die vorausgewählt ist, wenn du auf diesem Server [eine Site erstellst](https://ops.vimonto.com/docs/de/sites/create-a-site). Bestehende Sites ändert sie nicht.

Um einen Standard zu ändern, öffne das Aktionsmenü (**⋯**) einer Version und wähle **Standard auf der Kommandozeile** oder **Standard für neue Sites**. Der Standard für die Kommandozeile führt einen kurzen Job auf dem Server aus; der Standard für neue Sites wird sofort gespeichert.

Um eine bestehende Site auf eine andere Version umzustellen, ändere ihre PHP-Version in den [Site-Einstellungen](https://ops.vimonto.com/docs/de/sites/site-settings).

## PHP-Einstellungen ändern

Klicke neben einer Version auf **Einstellungen**, um ihre wichtigsten Einstellungen zu ändern. Jede Version hat eigene Werte, und **Anwenden** schreibt sie auf den Server und lädt PHP-FPM neu.

| Einstellung | Standard | Bereich | Was sie bewirkt |
| --- | --- | --- | --- |
| **Speicherlimit (MB)** | 512 | 64 bis 16384 | Der maximale Speicher, den eine Anfrage nutzen darf (`memory_limit`). |
| **Maximaler Upload (MB)** | 64 | 1 bis 4096 | Der größte Upload und Request-Body (`upload_max_filesize` und `post_max_size`). Gilt auch für Nginx. |
| **Maximale Ausführungszeit (Sekunden)** | 60 | 5 bis 3600 | Wie lange eine Anfrage laufen darf (`max_execution_time`). Danach bricht PHP-FPM die Anfrage ab. |
| **Max. Eingabevariablen** | 1000 | 1000 bis 100000 | Wie viele Formularfelder eine Anfrage haben darf (`max_input_vars`). Große Formulare, etwa in WordPress oder Magento, brauchen mehr. |
| **PHP-FPM-Prozesse** | 5 | 2 bis 500 | Wie viele Anfragen PHP gleichzeitig bearbeitet (`pm.max_children`). |
| **OPcache** | An | An oder aus | Speichert kompilierten PHP-Code zwischen. Schneller und in Produktion fast immer gewünscht. |

Diese Einstellungen gelten für PHP-FPM, das deine Web-Anfragen bedient. Die Kommandozeile hat eine eigene Konfiguration mit einem Speicherlimit von 1 GB, sodass lange Artisan-Befehle und Composer-Installationen nicht durch den Web-Wert begrenzt werden.

### Wie viele PHP-FPM-Prozesse brauchst du?

Jeder PHP-FPM-Prozess bearbeitet eine Anfrage gleichzeitig und kann bis zum Speicherlimit belegen. Eine einfache Regel: Die Anzahl der Prozesse mal den typischen Speicher pro Anfrage muss neben Datenbank und anderen Diensten in den freien Arbeitsspeicher des Servers passen. Stauen sich Anfragen, während der Server noch Speicher und CPU frei hat, erhöhe die Anzahl. Geht dem Server der Speicher aus, senke sie oder senke das Speicherlimit. Die Seite [Monitoring](https://ops.vimonto.com/docs/de/servers/monitoring) zeigt Arbeitsspeicher und Load im Zeitverlauf.

Die Einstellungen für Reserveprozesse des Pools richten sich nach der gewählten Anzahl, du legst also nur das Maximum fest.

> [!TIP]
> Wenn du **Maximaler Upload (MB)** erhöhst, erhöht Vimonto Deploy auch `client_max_body_size` von Nginx auf dem Server, damit Nginx große Uploads nicht ablehnt, bevor PHP sie sieht.

### Gelten die Einstellungen auch für isolierte Sites?

Teilweise. Eine [isolierte Site](https://ops.vimonto.com/docs/de/sites/create-a-site) hat einen eigenen PHP-FPM-Pool, der unter ihrem eigenen Linux-Benutzer läuft. Speicherlimit, Upload-Größe, Ausführungszeit, Eingabevariablen und OPcache gelten auch für sie, denn es sind PHP-Einstellungen der Version. Die Anzahl der **PHP-FPM-Prozesse** gilt nur für den geteilten Pool; der Pool einer isolierten Site startet Prozesse nach Bedarf, bis zu 10.

## Auf das neueste Patch-Release aktualisieren

Öffne das Aktionsmenü (**⋯**) einer Version und wähle **Auf den neuesten Patch aktualisieren**. Vimonto Deploy aktualisiert nur die Pakete dieser Version (zum Beispiel von 8.4.11 auf 8.4.12) und startet danach ihren PHP-FPM-Dienst neu. Patch-Releases enthalten Sicherheits- und Fehlerkorrekturen, keine neuen Sprachfunktionen.

Server installieren Sicherheitsupdates außerdem automatisch. Diese Aktion ist vor allem nützlich, wenn du eine Korrektur sofort brauchst.

## Eine PHP-Version entfernen

Öffne das Aktionsmenü (**⋯**), wähle **Entfernen** und bestätige. Vimonto Deploy stoppt den PHP-FPM-Dienst der Version, entfernt ihre Pakete und löscht ihre Konfiguration.

Eine Version, die Standard für die Kommandozeile oder für neue Sites ist, kannst du nicht entfernen: Mache zuerst eine andere Version zum Standard.

> [!WARNING]
> Sites, die diese Version noch verwenden, funktionieren dann nicht mehr. Stelle sie vor dem Entfernen in ihren [Site-Einstellungen](https://ops.vimonto.com/docs/de/sites/site-settings) auf eine andere Version um.

## Häufig gestellte Fragen

### Wie erhöhe ich das PHP-Upload-Limit?

Öffne **PHP**, klicke neben der Version deiner Site auf **Einstellungen**, erhöhe **Maximaler Upload (MB)** und klicke auf **Anwenden**. Vimonto Deploy ändert sowohl die Upload- und Post-Limits von PHP als auch das Request-Body-Limit von Nginx.

### Können verschiedene Sites auf einem Server verschiedene PHP-Versionen nutzen?

Ja. Installiere alle benötigten Versionen auf der Seite **PHP** und wähle die Version pro Site beim Erstellen oder später in ihren Einstellungen.

### Warum zeigt `php -v` auf dem Server eine andere Version als meine Site?

Die Kommandozeile verwendet den Standard **Kommandozeile**, während jede Site über PHP-FPM ihre eigene Version nutzt. Mache die Version der Site zum Standard für die Kommandozeile oder rufe die Version direkt auf, zum Beispiel `php8.4 artisan migrate`.

### Kann ich die php.ini von Hand bearbeiten?

Vimonto Deploy schreibt seine Einstellungen nach `/etc/php/{version}/fpm/conf.d/99-vimonto.ini` und überschreibt diese Datei, wenn du auf **Anwenden** klickst. Änderungen in anderen Dateien unter `/etc/php` bleiben unangetastet, die Einstellungen in `99-vimonto.ini` haben aber Vorrang vor den meisten davon.
