Bug #88
offen[Bugsink] Exception: Cannot access offset of type string on string
0%
Beschreibung
Bugsink: https://bugsink.cytrus.de/issues/issue/baeeb002-3abf-45d4-81a7-18a5234f34f4/event/last/
Typ: NEW issue
Projekt: www-rietberg-de
Bugsink Alert
Exception: Cannot access offset of type string on string
Automatisch erstellt durch n8n
KI-Analyse:
Analyse des Fehlers: Cannot access offset of type string on string¶
1. Ursache identifizieren¶
Der Fehler TypeError: Cannot access offset of type string on string tritt auf, wenn versucht wird, auf einen String wie ein Array zuzugreifen (z. B. $string['key']). In PHP 8.0+ ist dies ein TypeError, während es in älteren Versionen ein Warning war.
Konkrete Ursache im Stacktrace:
- Der Fehler entsteht nicht direkt in den TYPO3-Core-Klassen, sondern wird von einer Middleware oder einem Request-Handler ausgelöst (siehe Frames wie
VerifyHostHeader,NormalizedParamsAttribute). - Die wahrscheinlichste Quelle ist ein falsch verarbeiteter HTTP-Request-Parameter (z. B.
$_GET,$_POST,$_SERVER), der als String behandelt wird, obwohl er ein Array sein sollte. - Typische Szenarien:
- Ein Extension-Code oder Middleware greift auf
$request->getQueryParams()oder$request->getParsedBody()zu und behandelt den Rückgabewert fälschlicherweise als Array, obwohl er ein String ist. - Ein falsch konfigurierter Formular-Parameter (z. B.
name="data[key]"), der als String ankommt, aber als Array verarbeitet wird. - Ein Custom Middleware oder Hook, der den Request manipuliert und dabei einen String als Array interpretiert.
- Ein Extension-Code oder Middleware greift auf
Beispiel für den Fehler:
$params = $request->getQueryParams(); // Gibt z. B. "foo" (String) zurück
$value = $params['bar']; // Fehler: "Cannot access offset of type string on string"
2. Fix beschreiben (konkret)¶
Lösungsansätze:
A) Request-Parameter validieren (empfohlen)¶
-
Vor dem Zugriff prüfen, ob der Parameter ein Array ist:
$params = $request->getQueryParams(); if (is_array($params) && isset($params['key'])) { $value = $params['key']; } else { // Fallback oder Fehlerbehandlung $value = null; }
B) Middleware/Extension-Code anpassen¶
- Falls der Fehler in einer Custom Middleware oder Extension auftritt:
-
Debuggen, wo der String als Array behandelt wird (z. B. mit
var_dump($variable)vor dem Zugriff). -
Typprüfung einbauen:
if (!is_array($variable)) { throw new \RuntimeException('Expected array, got ' . gettype($variable)); }
-
Debuggen, wo der String als Array behandelt wird (z. B. mit
C) TYPO3-Konfiguration prüfen¶
-
Formulare überprüfen:
- Falls der Fehler bei Formularen auftritt, sicherstellen, dass
name-Attribute korrekt sind (z. B.name="tx_myext[field]"stattname="field").
- Falls der Fehler bei Formularen auftritt, sicherstellen, dass
-
TypoScript/Fluid prüfen:
- Falls der Fehler in einem Fluid-Template oder TypoScript auftritt, sicherstellen, dass Daten korrekt als Array übergeben werden.
D) TYPO3-Core-Update (falls relevant)¶
- Falls der Fehler in einer älteren TYPO3-Version auftritt (z. B. < v10), könnte ein Update helfen, da neuere Versionen strengere Typprüfungen haben.
3. Betroffene TYPO3 Extension nennen¶
Der Fehler stammt nicht direkt aus dem TYPO3-Core, sondern aus:
-
Einer Custom Extension (wahrscheinlichste Ursache):
- Suche nach Extensions, die Middleware registrieren (z. B. in
ext_localconf.phpmitGeneralUtility::makeInstance(MiddlewareDispatcher::class)->addMiddleware(MyMiddleware::class)). - Prüfe Hooks oder Request-Handler, die auf
$_GET/$_POSTzugreifen.
- Suche nach Extensions, die Middleware registrieren (z. B. in
-
Einer Drittanbieter-Extension (z. B.
news,form,powermail):- Falls der Fehler bei bestimmten Aktionen auftritt (z. B. Formular-Submit), könnte die Extension falsche Request-Daten verarbeiten.
-
Einer Custom Middleware (z. B. in
typo3conf/ext/myext/Classes/Middleware/).
Empfohlene Debug-Schritte:
-
Stacktrace analysieren:
- Der Fehler tritt in
VerifyHostHeaderoderNormalizedParamsAttributeauf → Suche nach Code, der vor diesen Middlewares den Request manipuliert.
- Der Fehler tritt in
-
Xdebug aktivieren:
- Setze einen Breakpoint in
AbstractApplication.php:110und verfolge den Request rückwärts.
- Setze einen Breakpoint in
-
Request-Daten loggen:
\TYPO3\CMS\Core\Utility\GeneralUtility::devLog( 'Request params: ' . print_r($request->getQueryParams(), true), 'myext' );
4. Confidence (0-100%)¶
- 90% – Der Fehler ist klar ein Typproblem beim Zugriff auf String als Array.
-
10% Unsicherheit:
- Die genaue Extension kann ohne weiteren Code nicht benannt werden.
- Falls der Fehler nur in bestimmten Umgebungen auftritt (z. B. mit aktiviertem Caching), könnte die Ursache komplexer sein.
Zusammenfassung der nächsten Schritte¶
-
Request-Daten prüfen (z. B. mit
var_dump($request->getQueryParams())). -
Middleware/Extension-Code durchsuchen, wo auf
$request->getQueryParams()oder$_GET/$_POSTzugegriffen wird. -
Typprüfungen einbauen (
is_array()vor Array-Zugriffen). - Formulare/TypoScript prüfen, falls der Fehler bei Formularen auftritt.
-
TYPO3-Logs (
var/log/typo3_*.log) auf weitere Hinweise durchsuchen.
Falls du den genauen Codeausschnitt hast, wo der Fehler auftritt, kann ich die Analyse weiter präzisieren!
Nichts anzuzeigen