Signatur
Beschreibung
wincache_refresh_if_changed() weist den WinCache-Extension an, die internen Cache-Einträge für die angegebenen Dateien zu überprüfen und bei Bedarf zu aktualisieren. Wurde keine Dateiliste übergeben, werden alle aktuell im Cache gehaltenen Dateien geprüft.
Die Funktion ist besonders nützlich, wenn auf dem Webserver die automatische Erkennung von Dateiänderungen deaktiviert ist (wincache.fcenabled=0 oder ein langes wincache.fcage-Intervall gesetzt wurde). In diesem Szenario würde WinCache veraltete Opcode-Versionen ausliefern, bis der Cache abläuft – mit dieser Funktion lässt sich dies gezielt vermeiden.
Ein typischer Einsatz ist der Deployment-Prozess: Nach dem Kopieren neuer PHP-Dateien auf den Server kann ein administratives Skript wincache_refresh_if_changed() mit der Liste der geänderten Dateien aufrufen, um sicherzustellen, dass der Cache sofort aktualisiert wird, ohne den gesamten Cache zu leeren oder den Server neu zu starten.
Die Funktion steht ausschließlich auf Windows-Systemen zur Verfügung, auf denen die WinCache-Extension installiert und aktiviert ist.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $files | array | [] | Ein Array mit absoluten oder relativen Dateipfaden zu den PHP-Dateien, deren Cache-Einträge aktualisiert werden sollen. Wird ein leeres Array übergeben oder der Parameter weggelassen, werden alle aktuell zwischengespeicherten Dateien geprüft und ggf. aktualisiert. |
Rückgabewert
true zurück, wenn die Cache-Aktualisierung erfolgreich durchgeführt wurde, andernfalls false (z. B. wenn WinCache nicht aktiv ist oder ein ungültiger Dateipfad übergeben wurde).Beispiele
Bestimmte Dateien nach einem Deployment aktualisieren
<?php
// Nach dem Kopieren neuer Dateien auf den Server gezielt den Cache aktualisieren
$geaenderteDateien = [
'C:/inetpub/wwwroot/app/controllers/HomeController.php',
'C:/inetpub/wwwroot/app/models/User.php',
];
$erfolg = wincache_refresh_if_changed($geaenderteDateien);
if ($erfolg) {
echo 'Cache-Einträge erfolgreich aktualisiert.';
} else {
echo 'Fehler beim Aktualisieren der Cache-Einträge.';
}
Gesamten Cache für alle gecachten Dateien aktualisieren
<?php
// Alle gecachten Dateien prüfen und bei Bedarf aktualisieren
// (z. B. nach einem vollständigen Deployment)
if (wincache_refresh_if_changed()) {
echo 'Alle Cache-Einträge wurden erfolgreich geprüft und aktualisiert.';
} else {
echo 'Cache-Aktualisierung fehlgeschlagen oder WinCache nicht verfügbar.';
}
// Wichtig · Fallstricke
Plattformabhängigkeit: wincache_refresh_if_changed() ist ausschließlich unter Windows verfügbar und setzt die WinCache-PHP-Extension voraus. Ein Aufruf auf anderen Plattformen führt zu einem fatalen Fehler (undefined function).
Sicherheitshinweis: Der Aufruf dieser Funktion sollte auf administrative Skripte beschränkt und nicht öffentlich zugänglich gemacht werden, da ein Angreifer andernfalls durch gezieltes Triggern der Funktion den Cache manipulieren könnte.
Verfügbarkeit prüfen: Es empfiehlt sich, vor dem Aufruf mit function_exists('wincache_refresh_if_changed') zu prüfen, ob die Funktion verfügbar ist, um plattformunabhängigen Code zu schreiben.