Projekt

Allgemein

Profil

Aktionen

Bug #88

offen

[Bugsink] Exception: Cannot access offset of type string on string

Von Bug Sink vor 25 Tagen hinzugefügt.

Status:
Neu
Priorität:
wichtig
Zugewiesen an:
-
Beginn:
29.07.2026
Abgabedatum:
% erledigt:

0%

Geschätzter Aufwand:

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.

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));
      }
      
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]" statt name="field").
  • 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.php mit GeneralUtility::makeInstance(MiddlewareDispatcher::class)->addMiddleware(MyMiddleware::class)).
    • Prüfe Hooks oder Request-Handler, die auf $_GET/$_POST zugreifen.
  • 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:

  1. Stacktrace analysieren:
    • Der Fehler tritt in VerifyHostHeader oder NormalizedParamsAttribute auf → Suche nach Code, der vor diesen Middlewares den Request manipuliert.
  2. Xdebug aktivieren:
    • Setze einen Breakpoint in AbstractApplication.php:110 und verfolge den Request rückwärts.
  3. 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

  1. Request-Daten prüfen (z. B. mit var_dump($request->getQueryParams())).
  2. Middleware/Extension-Code durchsuchen, wo auf $request->getQueryParams() oder $_GET/$_POST zugegriffen wird.
  3. Typprüfungen einbauen (is_array() vor Array-Zugriffen).
  4. Formulare/TypoScript prüfen, falls der Fehler bei Formularen auftritt.
  5. 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

Aktionen

Auch abrufbar als: Atom PDF