PHP ist eine interpretierte Sprache: Bevor eine Datei ausgeführt wird, liest PHP sie ein, analysiert sie und übersetzt sie in interne Anweisungen, die Opcodes. Ohne Cache wiederholt sich diese Arbeit bei jeder Anfrage für jede geladene Datei. Die PHP-Dokumentation fasst die Aufgabe von OPcache so zusammen: Es speichert vorkompilierten Bytecode der Skripte im Shared Memory, sodass PHP die Skripte nicht bei jeder Anfrage laden und parsen muss.
Wie OPcache funktioniert
OPcache ist eine mit PHP ausgelieferte Erweiterung, die über die Direktive zend_extension geladen wird. Bei der ersten Ausführung einer Datei landen ihre Opcodes im Shared Memory. Die folgenden Anfragen verwenden sie direkt weiter, egal welcher PHP-FPM-Worker sie bearbeitet, denn der Speicher wird von den Prozessen desselben Masters gemeinsam genutzt.

Um Änderungen zu erkennen, prüft OPcache standardmäßig alle zwei Sekunden die Zeitstempel der Dateien (opcache.revalidate_freq=2). Schaltest du diese Prüfung ab (opcache.validate_timestamps=0), was in der Produktion etwas bringen kann, werden Dateiänderungen erst bemerkt, wenn der Cache mit opcache_reset() oder durch einen Neustart von PHP geleert wird.
Die wichtigen Einstellungen
Von PHP dokumentierte Standardwerte:
opcache.memory_consumption: 128 MB Shared Memory;opcache.max_accelerated_files: höchstens 10.000 Dateien;opcache.interned_strings_buffer: 8 MB für internierte Strings;opcache.revalidate_freq: 2 Sekunden.
Ein WordPress mit Page Builder, WooCommerce und rund zwanzig Plugins kann die vorgesehene Dateizahl oder den Speicher überschreiten. Dann wird ein Teil der Skripte nicht mehr gecacht, und der Vorteil schwindet. Die Funktion opcache_get_status() oder ein Diagnose-Plugin zeigt den Füllstand an.
Seit PHP 7.4 lädt das Preloading (opcache.preload) Dateien beim Start von PHP. Es ist unter Windows nicht verfügbar und braucht für jede Aktualisierung einen Neustart: Es passt besser zu festgeschriebenen Anwendungen als zu einem WordPress, das häufig aktualisiert wird.
Für WordPress
Die WordPress-Dokumentation empfiehlt, einen Opcode-Cache wie OPcache einzusetzen, um die PHP-Performance deutlich zu verbessern. Er ergänzt den Seiten-Cache und den Objekt-Cache, ohne sie zu ersetzen: OPcache spart das Kompilieren des Codes, der Objekt-Cache spart Datenbankabfragen, der Seiten-Cache spart die Ausführung von PHP.
- Beim Shared Hosting ist OPcache normalerweise aktiv; prüfe es mit phpinfo() oder in den PHP-Einstellungen deines Panels.
- Auf einem VPS passt du Speicher und Dateizahl an die tatsächliche Größe deiner Websites an.
- Lade PHP-FPM nach einem Wechsel der PHP-Version neu, um mit einem sauberen Cache zu starten; das ist auch der Moment zu prüfen, ob der gewählte Zweig noch gepflegt wird (siehe PHP-Versionen am Ende ihres Supports).
Sicherheit
Auf einem geteilten Server teilen sich die Pools desselben PHP-FPM-Masters den Cache. Direktiven wie opcache.validate_permission und opcache.validate_root prüfen die Rechte an gecachten Dateien und verhindern Kollisionen in chroot-Umgebungen. Die Direktive opcache.restrict_api beschränkt die Nutzung der OPcache-Funktionen auf einen bestimmten Pfad, damit nicht irgendein Skript den Cache leeren kann. Diese Einstellungen ergänzen die aus unserem Leitfaden, um PHP zu härten.
Häufige Fehler
validate_timestamps abschalten und dann rätseln, warum eine Dateiänderung nicht sichtbar wird; auf einer großen Website den Standardspeicher belassen; glauben, OPcache ersetze einen Seiten-Cache.