Bug #193
offen[Bugsink] ErrorException: Warning: unlink(/srv/www/www.verl.de/pages/public/typo3temp/assets/tx_staticfilecache/https_www.verl.de_443/wirtschaft-arbeit/gesundh…
0%
Beschreibung
Bugsink: https://bugsink.cytrus.de/issues/issue/23ad585c-dcda-40ce-9d6f-c90f46b7156d/event/last/
Typ: NEW issue
Projekt: www-verl-de
Bugsink Alert
ErrorException: Warning: unlink(/srv/www/www.verl.de/pages/public/typo3temp/assets/tx_staticfilecache/https_www.verl.de_443/wirtschaft-arbeit/gesundh…
Automatisch erstellt durch n8n
KI-Analyse:
1. Ursache identifizieren¶
Race Condition / Timing-Problem im staticfilecache beim Löschen von Cache-Metadaten.
-
Was passiert: Die Extension
staticfilecache(b13/lochmueller) versucht viaunlink(), die Metadaten-Dateiindex.config.jsonfür einen gecachten Pfad (wirtschaft-arbeit/gesundheitswesen.html) zu löschen. - Warum es knallt: Die Datei existiert zum Zeitpunkt des Löschversuchs nicht mehr („No such file or directory“).
-
Typische Szenarien:
- Parallele Requests: Zwei Requests treffen gleichzeitig auf denselben Cache-Eintrag (z. B. Cache-Warmup + regulärer Request, oder zwei Crawler). Request A löscht die Dateien (Data + Config), Request B versucht kurz darauf die Config nochmal zu löschen.
-
Deployment/CI: Ein Deploy-Script (
typo3cms cache:flushoder manuellesrm -rf typo3temp/assets/tx_staticfilecache) hat die Dateien bereits gelöscht, aber ein laufender PHP-Prozess (oder ein Shutdown-Handler) versucht noch aufzuräumen. -
Fehlerhafte Logik in der Extension: Der Code prüft nicht via
file_exists()oderis_file()vor demunlink(), sondern verlässt sich darauf, dass die Datei muss da sein.
-
Warum der Stacktrace „nutzlos“ aussieht: Der Fehler tritt als Warning (
ErrorExceptionvia Error Handler) auf. Der Stacktrace zeigt den gerade aktiven Code (TYPO3 Bootstrap Middlewares), nicht den Verursacher. Derunlink()Aufruf passiert wahrscheinlich in einem Shutdown-Handler (register_shutdown_function), einem Destructor oder asynchron via Signal Handler (beib13/staticfilecacheoft beimpostProcessRequest/shutdown), nachdem die Middlewares bereits durchlaufen sind.
2. Fix beschreiben (konkret)¶
Datei: typo3conf/ext/staticfilecache/Classes/Service/StaticFileCacheService.php (oder CacheService.php / FileBackend.php je nach Version – suche nach unlink im Kontext von config.json / index.config.json).
Änderung: Defensive Programmierung vor dem unlink().
Code-Beispiel (Patch):
// ALT (fehlerhaft):
unlink($configFilePath);
// NEU (robust):
// @ unterdrückt die Warning, file_exists checkt Race-Condition sicher genug für Cache-Logs
if (is_file($configFilePath)) {
@unlink($configFilePath);
}
// ODER moderner (PHP 7+):
try {
unlink($configFilePath);
} catch (\Throwable $e) {
// Loggen auf Debug-Level, nicht crashen. Datei weg == Ziel erreicht.
if ($e->getCode() !== 2) { // ENOENT = 2 (No such file or directory)
GeneralUtility::syslog('staticfilecache', 'Could not delete config: ' . $e->getMessage(), GeneralUtility::SYSLOG_SEVERITY_WARNING);
}
}
Zusätzliche Empfehlung (Extension-Konfiguration):
Prüfen, ob ignoreErrors oder silentMode in der Extension-Konfig (TSconfig / Settings.yaml) gesetzt werden kann, um Warnings generell zu schlucken (weniger sauber als Code-Fix).
3. Betroffene TYPO3 Extension nennen¶
staticfilecache (Vendor: b13 / lochmueller, Packagist: b13/staticfilecache oder lochmueller/staticfilecache je nach Version).
- Pfad im Fehler:
typo3temp/assets/tx_staticfilecache/...bestätigt den Extension Keytx_staticfilecache.
4. Confidence (0-100%)¶
95%
-
Hohe Sicherheit: Dateipfad (
tx_staticfilecache), Dateiname (index.config.json) und Fehlerart (unlinkwarning) sind fingerabdruck-spezifisch für diese Extension. - Restunsicherheit (5%): Der exacte Zeilenkontext im Stacktrace fehlt (Shutdown/Destructor vs. Middleware), aber die Fix-Strategie (Datei-Existenz prüfen / Exception fangen) ist universell für diesen Fehler in dieser Extension korrekt.
Nichts anzuzeigen