Bug #272
offen[Bugsink] ErrorException: Warning: unlink(/srv/www/www.verl.de/pages/public/typo3temp/assets/tx_staticfilecache/https_www.verl.de_443/datenschutzerklaerung/inf…
0%
Beschreibung
Bugsink: https://bugsink.cytrus.de/issues/issue/b7cde1f2-0697-4b7f-a2fa-5b9e214772df/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/datenschutzerklaerung/inf…
Automatisch erstellt durch n8n
KI-Analyse:
1. Ursache identifizieren¶
Race Condition / Inkonsistenter Cache-Zustand in der Extension staticfilecache.
Der Fehler tritt im Shutdown/Response-Finalisierungs-Phase auf (erkennbar an ResponsePropagation Middleware ganz unten im Stack). Die Extension staticfilecache (bzw. tx_staticfilecache) versucht, eine Konfigurationsdatei (index.config.json) für einen gecachten statischen HTML-Export zu löschen (unlink), diese Datei existiert physisch jedoch nicht mehr auf dem Dateisystem.
Typische Szenarien:
- Parallel Requests: Zwei Requests verarbeiten dieselbe URL. Request A löscht den Cache-Eintrag (oder regeneriert ihn), Request B versucht kurz darauf im Shutdown noch Metadaten aufzuräumen, die Request A bereits entfernt hat.
-
Manueller Cache-Clear: Ein Redakteur/Cronjob leerte
typo3temp/assets/tx_staticfilecachewährend ein Request noch lief. -
Fehlerhafte Logik: Die Extension prüft vor dem
unlinknicht auf Existenz (file_exists/is_file).
Da es sich um einen Warning handelt, der via ErrorHandler zu ErrorException eskaliert, bricht die Applikation hier ab (Weißer Bildschirm / 500er), obwohl das Caching selbst "nur" ein Nebenaspekt ist.
2. Fix beschreiben (konkret)¶
Sofortmaßnahme (Workaround im Projekt-Code / AdditionalConfiguration.php / ext_localconf.php):
Den ErrorHandler für E_WARNING in Shutdown-Funktionen entschärfen oder die Extension patchen. Besser: Extension aktualisieren/fixen.
Korrektur in der Extension staticfilecache (Datei: Classes/Cache/StaticFileCache.php oder ähnlich, je nach Version):
Suche nach der unlink-Aufrufstelle für index.config.json (meist in removeCacheFiles, clearCacheForPage oder shutdown-Methode).
Ersetze:
unlink($configFilePath);
Durch defensiven Code:
// TYPO3\Core\Utility\GeneralUtility::unlink_linktempfiles() nutzt intern @unlink und prüft Existenz.
// Oder nativ:
if (is_file($configFilePath)) {
unlink($configFilePath);
}
// Oder mit Error Suppression (weniger sauber, aber schnell):
@unlink($configFilePath);
Empfehlung: Update der Extension auf die neueste Version (z. B. b13/staticfilecache >= 5.x / 6.x für TYPO3 v11/v12), da neuere Versionen GeneralUtility::unlink_linktempfiles() nutzen oder Filesystem-Abstraktionen ($file->delete()) die robust sind.
3. Betroffene TYPO3 Extension nennen¶
staticfilecache (Composer: b13/staticfilecache oder legacy tx_staticfilecache)
Pfad-Beweis: typo3temp/assets/**tx_staticfilecache**/...
4. Confidence¶
95%
Begründung: Der Pfad tx_staticfilecache ist eindeutig. Der Stacktrace zeigt Core-Middlewares (ResponsePropagation), was auf einen shutdown-Hook oder terminate()-Listener der Extension hinweist, der nach dem Kern-Response läuft. unlink auf fehlende Datei ist ein klassisches Pattern-Problem genau in dieser Extension bei High-Concurrency oder Cache-Clearing.
Nichts anzuzeigen