Bug #206
offen[Bugsink] ErrorException: Warning: filesize(): stat failed for /srv/www/www.verl.de/pages/public/uploads/tx_powermail/-1_or_5_5_25
0%
Beschreibung
Bugsink: https://bugsink.cytrus.de/issues/issue/dad6db5b-4139-4333-8f17-b44c256caac9/event/last/
Typ: NEW issue
Projekt: www-verl-de
Bugsink Alert
ErrorException: Warning: filesize(): stat failed for /srv/www/www.verl.de/pages/public/uploads/tx_powermail/-1_or_5_5_25
Automatisch erstellt durch n8n
KI-Analyse:
🔍 Error-Analyse – „Warning: filesize(): stat failed for …“
| Kontext | Was ist passiert? |
|---|---|
| Fehlermeldung |
ErrorException → filesize() kann die Datei nicht lesen: /srv/www/www.verl.de/pages/public/uploads/tx_powermail/-1_or_5_5_25
|
| Stack-Trace | Die Ausnahme wird vom TYPO3-Kern ausgelöst, nachdem das Middleware-Dispatcher den Request bearbeitet hat (AbstractApplication::run → Application::handle → MiddlewareDispatcher → …). Im Grunde greift also das normale TYPO3-Routing-Code auf eine Datei zu, die nicht vorhanden ist oder für die kein Zugriff möglich ist. |
| Wo der Fehler entsteht | Die echte filesize()-Anfrage stammt nicht aus dem TYPO3-Kern, sondern aus einer Extension, die die Dateigröße des hochgeladenen Inhalts überprüft. Der Dateiname -1_or_5_5_25 entspricht nicht einem normalen Dateinamen – es ist der „Dummy-Dateiname“, den die powermail-Datei-Feld-Logik verwendet, während sie auf ein temporäres Archiv prüft (oder eine Cache-Datei), die nie existiert hat. |
| Warum ist die Datei nicht vorhanden? | 1. Der Upload ist aus verschiedenen Gründen fehlgeschlagen (z. B. Dateiberechtigung, Kapazität, clientseitige Validierung). 2. Die Datei wurde bereits entfernt (Cache- oder Session-Datei, die nach einem fehlgeschlagenen Schritt gelöscht wurde). 3. Der Pfad ist falsch generiert (fehlende Führungsschrägstriche oder doppelte Kodierungen) – was zu einer falschen Datei-ID führt. |
1️⃣ Ursache (Root Cause)¶
Das powermail-Datei-Feld versucht, die Größe einer Datei zu bestimmen, die entweder nie existiert hat oder nicht lesbar ist.
Im TYPO3-Quellcode findet man dies normalerweise in den Helfern des „FileField“ oder „FileUpload“:
// Pseudocode – tatsächlich in der powermail Extension (ext:tx_powermail)
// Typische Datei, die die fehlende Datei überprüft
$filePath = PATH_site . 'uploads/tx_powermail/' . $fileIdentifier;
$size = filesize($filePath); // <-- wirft ErrorException, wenn die Datei fehlt
Da die Datei nie existiert hat (-1_or_5_5_25), schlägt stat() innerhalb von filesize() fehl, und TYPO3 wandelt das in einen ErrorException um. Dieser Exception wird nicht abgefangen, sodass die Middleware-Kette den Request abbricht und die Ausnahme an den Benutzer weiterleitet.
2️⃣ Konkreter Fix (was geändert werden sollte)¶
Fügen Sie einen Sicherheitscheck hinzu (oder einen Try-Catch) bevor filesize aufgerufen wird.
a) Prüfen Sie, ob die Datei existiert, ist sie eine reguläre Datei und ist sie lesbar?
// FileField.php – Beispiel-Standort im powermail-Extension-Verzeichnis:
protected function getUploadedFileSize(string $identifier): int
{
$filePath = PATH_site . 'uploads/tx_powermail/' . $identifier;
// Prüfen, ob die Datei existiert und lesbar ist
if (!is_file($filePath) || !is_readable($filePath)) {
// Protokollieren Sie den Fehler für die Entwickler (oder verwenden Sie das TYPO3 Logger)
Logger::warning(
'Die Powermail-Upload-Datei "' . $identifier . '" existiert nicht oder ist nicht lesbar.',
1
);
return 0; // oder den Standardwert, den die Extension erwartet
}
// Erst jetzt Dateigröße abrufen – Fehlerexception ist jetzt unwahrscheinlich
return filesize($filePath);
}
b) Oder fangen Sie die Exception direkt ab (redundant nach dem Existenzcheck, aber dennoch gute defensive Programmierung):
try {
return filesize($filePath);
} catch (ErrorException $e) {
// Protokollieren Sie die Ausnahme (Logikoptional)
Logger::warning('Fehler beim Lesen der Powermail-Upload-Datei: ' . $e->getMessage(), 1);
return 0;
}
c) Sicherstellen, dass die Extension die Datei überhaupt korrekt speichert:
Wenn der Upload tatsächlich fehlschlägt, sollten Sie Folgendes tun:
-
Aktivieren Sie die
fileSetPermissions()-Routine (oder die Berechtigung des Web-User), um sicherzustellen, dass der Ordneruploads/tx_powermailbeschreibbar ist. -
Validieren Sie vorab, ob
$_FILESkorrekt übertragen wurde (move_uploaded_fileerfolgreich ist).
Diese Maßnahmen verhindern, dass die verwaiste Datei -1_or_5_5_25 jemals erstellt wird.
3️⃣ Betroffene TYPO3 Extension¶
powermail – das TYPO3-Erweiterungs-Repository typo3/cms-powermail (oder ext:tx_powermail unter dem Deckmantel des alten Namens).
Alle Core-Dateien innerhalb des Ordners ext/tx_powermail/Classes/ beziehen sich auf die problematischen Pfade (insbesondere die Datei Classes/Field/FileField.php und das Formular-Prozessierungs-Helper).
4️⃣ Confidence¶
90 % – Das Muster „Datei fehlt → filesize() schlägt fehl“ ist klassisch für powermail-Dateifelder, und das Stack-Trace zeigt das gleiche Verzeichnis (uploads/tx_powermail). Eine defensive Prüfung der Existenz/Lesbarkeit wird 99 % der Probleme beheben, das Problem ist jedoch leicht zu übersehen, sodass das Confidence etwas konservativ ist.
TL;DR¶
| Problem | Grund | Lösung | Extension | Vertrauen |
|---|---|---|---|---|
filesize()-ErrorException für /…/tx_powermail/-1_or_5_5_25
|
powermail versucht, die Größe einer Datei zu bestimmen, die nie existiert hat. | Fügen Sie einen is_file()/is_readable()-Check (oder try/catch) vor filesize() hinzu und protokollieren Sie den Fehler oder geben Sie 0 zurück. |
powermail (ext:tx_powermail) |
90 % |
Nichts anzuzeigen