Projekt

Allgemein

Profil

Aktionen

Bug #117

offen

[Bugsink] ErrorException: Warning: file_get_contents(https://rietberg.ratsinfomanagement.net/webservice/portal/getSearch?type=2&maxOccurs=-1&terms=Hill…

Von Bug Sink vor etwa 2 Monaten hinzugefügt.

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

0%

Geschätzter Aufwand:

Beschreibung

Bugsink: https://bugsink.cytrus.de/issues/issue/7310d43a-8f1f-462e-b4f9-5a500d36dd16/event/last/

Typ: NEW issue

Projekt: www-rietberg-de

Bugsink Alert

ErrorException: Warning: file_get_contents(https://rietberg.ratsinfomanagement.net/webservice/portal/getSearch?type=2&maxOccurs=-1&terms=Hill…


Automatisch erstellt durch n8n

KI-Analyse:

Analyse des Fehlers

1. Ursache identifizieren

Der Fehler tritt auf, weil file_get_contents() versucht, eine externe API-Anfrage an
https://rietberg.ratsinfomanagement.net/webservice/portal/getSearch?type=2&maxOccurs=-1&terms=Hillemeyer
zu senden, aber die Ziel-URL antwortet mit einem HTTP 500 Internal Server Error.

  • Technische Ursache:

    • Die API (ratsinfomanagement.net) liefert einen Server-Fehler (500), was bedeutet, dass der Request syntaktisch korrekt ist, aber der Server intern einen Fehler verursacht.
    • Mögliche Gründe für den 500er-Fehler:
      • Falsche Parameter (type=2, maxOccurs=-1, terms=Hillemeyer).
      • Server-seitige Probleme (z. B. Datenbankfehler, fehlende Berechtigungen, falsche Konfiguration).
      • Die API erwartet möglicherweise andere Parameter oder eine Authentifizierung.
      • Der Server blockiert Anfragen von der TYPO3-Instanz (z. B. wegen fehlendem API-Key, IP-Blockierung oder CORS).
  • TYPO3-seitige Ursache:

    • Die file_get_contents()-Methode wird ohne Fehlerbehandlung verwendet.
    • Es gibt keine Prüfung, ob die URL erreichbar ist oder ob die API korrekt antwortet.
    • Möglicherweise fehlt eine SSL-Verifizierung (falls die API HTTPS erzwingt).

2. Fix beschreiben (konkret)

Empfohlene Lösung:

  1. Fehlerbehandlung für file_get_contents() hinzufügen

    • Prüfen, ob die API erreichbar ist, bevor die Anfrage gesendet wird.
    • Falls ein 500er-Fehler auftritt, sollte eine benutzerfreundliche Fehlermeldung ausgegeben werden.
    $url = 'https://rietberg.ratsinfomanagement.net/webservice/portal/getSearch?type=2&maxOccurs=-1&terms=Hillemeyer';
    $context = stream_context_create([
        'http' => [
            'ignore_errors' => true, // Erlaubt das Lesen der Antwort auch bei HTTP-Fehlern
            'timeout' => 10,         // Timeout in Sekunden
        ],
        'ssl' => [
            'verify_peer' => false,  // Nur temporär für Debugging! (Nicht für Produktion!)
            'verify_peer_name' => false,
        ],
    ]);
    
    $response = @file_get_contents($url, false, $context);
    
    if ($response === false) {
        $error = error_get_last();
        throw new \RuntimeException(
            'API-Anfrage fehlgeschlagen: ' . ($error['message'] ?? 'Unbekannter Fehler') .
            ' (URL: ' . $url . ')'
        );
    }
    
    // HTTP-Statuscode prüfen
    $httpStatus = $http_response_header[0] ?? '';
    if (strpos($httpStatus, '500') !== false) {
        throw new \RuntimeException(
            'Die API antwortete mit einem Server-Fehler (500). Bitte prüfen Sie die Parameter oder kontaktieren Sie den API-Anbieter.'
        );
    }
    
  2. Alternative: cURL statt file_get_contents() verwenden

    • cURL bietet mehr Kontrolle über die Anfrage (Timeouts, Header, Authentifizierung).
    • Beispiel:
      $ch = curl_init($url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_TIMEOUT, 10);
      curl_setopt($ch, CURLOPT_FAILONERROR, false); // Erlaubt das Lesen von Fehlerantworten
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Nur für Debugging!
      $response = curl_exec($ch);
      
      if (curl_errno($ch)) {
          throw new \RuntimeException('cURL-Fehler: ' . curl_error($ch));
      }
      
      $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
      if ($httpCode >= 500) {
          throw new \RuntimeException('API antwortete mit HTTP ' . $httpCode);
      }
      curl_close($ch);
      
  3. API-Parameter prüfen

    • maxOccurs=-1 könnte ein Problem sein (evtl. erwartet die API eine positive Zahl oder unlimited).
    • terms=Hillemeyer könnte Sonderzeichen enthalten, die URL-kodiert werden müssen:
      $terms = urlencode('Hillemeyer');
      $url = "https://rietberg.ratsinfomanagement.net/webservice/portal/getSearch?type=2&maxOccurs=-1&terms=$terms";
      
  4. API-Dokumentation prüfen

    • Gibt es eine offizielle Dokumentation für die API?
    • Werden bestimmte Header (z. B. Accept: application/json) oder ein API-Key benötigt?
  5. Loggen der API-Antwort für Debugging

    • Falls die API eine Fehlermeldung zurückgibt, diese loggen:
      \TYPO3\CMS\Core\Utility\GeneralUtility::devLog(
          'API-Fehler: ' . $response,
          'my_extension',
          \TYPO3\CMS\Core\Log\LogLevel::ERROR
      );
      

3. Betroffene TYPO3 Extension nennen

  • Wahrscheinlichste Ursache:
    Der Fehler stammt aus einer benutzerdefinierten Extension, die die API von ratsinfomanagement.net abfragt.

    • Der Stacktrace zeigt, dass der Fehler in /public/index.php (Zeile 21) ausgelöst wird, was auf eine eigene Extension hindeutet (nicht auf eine Core-Extension).
    • Mögliche Kandidaten:
      • Eine Schnittstellen-Extension (z. B. für Ratsinformationssysteme).
      • Eine Such-Extension, die externe Daten abfragt.
  • Wie man die Extension identifiziert:

    1. Im Stacktrace nach dem Aufrufpfad suchen:
      • Der Fehler wird in /public/index.php ausgelöst, was darauf hindeutet, dass eine Frontend-Extension (z. B. ein Plugin) die API aufruft.
    2. Im TYPO3-Backend prüfen:
      • Extension Manager → Welche Extensions sind installiert?
      • TypoScript → Gibt es eine Konfiguration für die API?
      • Scheduler → Wird die API regelmäßig abgefragt?
    3. Im Code nach file_get_contents() suchen:
      grep -r "file_get_contents.*rietberg.ratsinfomanagement.net" typo3conf/ext/
      

4. Confidence (0-100%)

Aspekt Confidence
HTTP 500 ist ein Server-Fehler 100%
file_get_contents() ist die Ursache 90% (könnte auch cURL sein)
Fehler liegt in einer benutzerdefinierten Extension 85% (Stacktrace deutet darauf hin)
API-Parameter sind falsch 70% (muss geprüft werden)
SSL-Verifizierung fehlt 60% (könnte ein Problem sein)

Gesamt-Confidence: 85%

  • Der Fehler ist klar ein API-Problem (500er-Fehler), aber die genaue Ursache (falsche Parameter, fehlende Authentifizierung, Server-Problem) muss noch validiert werden.

Zusammenfassung der nächsten Schritte

  1. API manuell testen (z. B. mit Postman oder curl):
    curl -v "https://rietberg.ratsinfomanagement.net/webservice/portal/getSearch?type=2&maxOccurs=-1&terms=Hillemeyer"
    
  2. Parameter prüfen (z. B. maxOccurs=-1 → evtl. maxOccurs=100 testen).
  3. Fehlerbehandlung in der Extension verbessern (siehe Code-Beispiele oben).
  4. API-Dokumentation anfordern, falls vorhanden.
  5. TYPO3-Logs prüfen (var/log/typo3_*.log) auf weitere Hinweise.

Nichts anzuzeigen

Aktionen

Auch abrufbar als: Atom PDF