Signatur
Beschreibung
opcache_reset() leert den OPcache vollständig, sodass alle bisher gecachten PHP-Skripte aus dem Cache entfernt werden. Beim nächsten Aufruf eines Skripts wird es neu kompiliert und der resultierende Opcode wieder in den Cache geschrieben.
Diese Funktion ist besonders nützlich nach einem Deployment neuer PHP-Dateien, um sicherzustellen, dass der Web-Server sofort die aktualisierten Versionen verwendet, ohne auf den normalen Cache-Ablauf (opcache.revalidate_freq) warten zu müssen. Sie wird häufig als letzter Schritt in Deployment-Skripten eingesetzt.
Zu beachten ist, dass opcache_reset() nur wirkt, wenn OPcache überhaupt aktiv ist. Unter PHP-FPM oder einem anderen FastCGI-Setup beeinflusst ein CLI-Aufruf der Funktion nicht den Cache des laufenden Web-Server-Prozesses, da jeder Prozess seinen eigenen Shared-Memory-Bereich verwaltet. In diesem Fall sind HTTP-Aufrufe oder prozessbezogene Neustart-Strategien nötig.
Die Funktion steht zur Verfügung, wenn die OPcache-Erweiterung (opcache) geladen und aktiv ist. Ist OPcache deaktiviert, gibt die Funktion false zurück.
Rückgabewert
true zurück, wenn der Cache erfolgreich geleert wurde. Gibt false zurück, wenn OPcache nicht aktiviert ist oder der Reset fehlgeschlagen ist.Beispiele
Cache nach einem Deployment leeren
<?php
// Wird z. B. über einen internen HTTP-Endpunkt nach einem Deployment aufgerufen
if (function_exists('opcache_reset')) {
$result = opcache_reset();
if ($result) {
echo 'OPcache wurde erfolgreich geleert.';
} else {
echo 'OPcache konnte nicht geleert werden (ggf. nicht aktiv).';
}
} else {
echo 'OPcache-Erweiterung ist nicht verfügbar.';
}
Status vor und nach dem Reset prüfen
<?php
// Aktuellen Cache-Status ausgeben
$statusVorher = opcache_get_status();
echo 'Gecachte Skripte vorher: ' . $statusVorher['opcache_statistics']['num_cached_scripts'] . PHP_EOL;
// Cache zurücksetzen
if (opcache_reset()) {
echo 'Cache erfolgreich geleert.' . PHP_EOL;
} else {
echo 'Reset fehlgeschlagen.' . PHP_EOL;
}
// Status nach dem Reset
$statusNachher = opcache_get_status();
echo 'Gecachte Skripte nachher: ' . $statusNachher['opcache_statistics']['num_cached_scripts'] . PHP_EOL;
// Wichtig · Fallstricke
CLI vs. Web-Server: Ein Aufruf von opcache_reset() über die PHP-CLI löscht nur den Cache des CLI-Prozesses, nicht den des laufenden Web-Servers (z. B. PHP-FPM). Um den Cache des Web-Servers zu leeren, muss die Funktion innerhalb eines HTTP-Requests aufgerufen werden – etwa über ein geschütztes Deployment-Skript.
Sicherheit: Das Deployment-Skript, das opcache_reset() aufruft, sollte durch IP-Whitelisting, einen geheimen Token oder andere Zugangskontrollmechanismen geschützt sein, damit Dritte den Cache nicht beliebig invalidieren können.
Einstellung opcache.enable: Ist OPcache über opcache.enable=0 in der php.ini deaktiviert, gibt die Funktion stets false zurück.