Start · Sprachen · PHP · Referenz · opcache_invalidate

opcache_invalidate

Funktion

Invalidiert ein im OPcache gespeichertes Skript, sodass es beim nächsten Aufruf neu kompiliert wird.

seit PHP 5.5.0 Kategorie: misc

Signatur

opcache_invalidate(string $filename, bool $force = false): bool

Beschreibung

opcache_invalidate() markiert ein zuvor vom OPcache kompiliertes PHP-Skript als ungültig. Beim nächsten Aufruf des Skripts wird es dann neu eingelesen, geparst und in den Cache aufgenommen. Dies ist besonders nach Deployments hilfreich, wenn einzelne PHP-Dateien aktualisiert wurden und der Cache nicht vollständig geleert werden soll.

Standardmäßig (mit $force = false) wird die Datei nur dann wirklich invalidiert, wenn sich ihr Änderungszeitpunkt (mtime) gegenüber der gecachten Version unterscheidet. Setzt man $force = true, wird der Eintrag unabhängig vom Zeitstempel sofort als ungültig markiert – nützlich bei Deployments, bei denen der Zeitstempel nicht zuverlässig aktualisiert wird.

Die Funktion ist nur verfügbar, wenn die OPcache-Erweiterung geladen und aktiviert ist (opcache.enable = 1). In CLI-Umgebungen ist zu beachten, dass der CLI-Prozess einen eigenen, separaten OPcache verwendet und Invalidierungen dort keinen Einfluss auf den Webserver-Cache haben.

Soll der gesamte Cache geleert werden, eignet sich opcache_reset() besser. Für gezielte Aktualisierungen einzelner Dateien ist opcache_invalidate() jedoch die performantere Wahl.

Parameter

Name Typ Default Beschreibung
$filename Pflicht string Der absolute Pfad zur PHP-Datei, deren Cache-Eintrag invalidiert werden soll. Relative Pfade werden relativ zum aktuellen Arbeitsverzeichnis aufgelöst.
$force bool false Wenn true, wird die Datei unabhängig vom Änderungszeitpunkt sofort aus dem Cache entfernt. Bei false (Standard) erfolgt die Invalidierung nur, wenn der mtime-Wert abweicht.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Invalidierung erfolgreich war oder die Datei sich gar nicht im Cache befand. Gibt false zurück, wenn OPcache nicht aktiv ist oder die Invalidierung fehlgeschlagen ist.

Beispiele

Einzelne Datei nach einem Update invalidieren

<?php
$file = '/var/www/html/app/config.php';

if (opcache_invalidate($file, true)) {
    echo "Cache für '{$file}' wurde erfolgreich invalidiert.";
} else {
    echo "Invalidierung fehlgeschlagen oder OPcache nicht aktiv.";
}
Cache für '/var/www/html/app/config.php' wurde erfolgreich invalidiert.

Mehrere geänderte Dateien nach einem Deployment invalidieren

<?php
$updatedFiles = [
    '/var/www/html/src/Controller/HomeController.php',
    '/var/www/html/src/Model/UserModel.php',
    '/var/www/html/src/Service/AuthService.php',
];

$results = [];
foreach ($updatedFiles as $file) {
    $results[$file] = opcache_invalidate($file, true);
}

foreach ($results as $file => $success) {
    $status = $success ? 'OK' : 'FEHLER';
    echo "[{$status}] {$file}\n";
}
[OK] /var/www/html/src/Controller/HomeController.php [OK] /var/www/html/src/Model/UserModel.php [OK] /var/www/html/src/Service/AuthService.php

// Wichtig · Fallstricke

CLI vs. Webserver: Ein CLI-Aufruf von opcache_invalidate() betrifft nur den Cache des laufenden CLI-Prozesses, nicht den des PHP-FPM- oder Apache-Prozesses. Zur Cache-Verwaltung im Webserver-Kontext muss die Funktion über einen HTTP-Request ausgeführt werden.

Sicherheit: Skripte, die opcache_invalidate() mit benutzergesteuerten Dateinamen aufrufen, sind anfällig für Path-Traversal-Angriffe. Eingaben sollten grundsätzlich validiert und auf erlaubte Verzeichnisse beschränkt werden.

Konfiguration: Wenn opcache.enable auf 0 gesetzt ist oder die Erweiterung nicht geladen wurde, gibt die Funktion false zurück, ohne einen Fehler zu werfen. Mit opcache_get_status() kann der aktuelle Zustand des Caches überprüft werden.