Projekt

Allgemein

Profil

Aktionen

Bug #121

offen

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

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/668f8eb8-dc05-4cc3-8f67-45ec49e52192/event/last/

Typ: NEW issue

Projekt: www-rietberg-de

Bugsink Alert

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


Automatisch erstellt durch n8n

KI-Analyse:

Hier ist die präzise Analyse des Fehlers als Senior TYPO3/PHP-Entwickler:


1. Ursache identifizieren

Primäre Ursache:
Der Fehler tritt auf, weil die PHP-Funktion file_get_contents() versucht, eine externe HTTP-Anfrage an die URL
https://rietberg.ratsinfomanagement.net/webservice/portal/getSearch?type=1&maxOccurs=-1&terms=Sozialamt
zu senden, aber der Zielserver antwortet mit HTTP 503 Service Unavailable.

Technische Details:

  • HTTP 503 bedeutet, dass der Zielserver vorübergehend nicht verfügbar ist (z. B. wegen Wartungsarbeiten, Überlastung oder Downtime).
  • Die URL enthält einen XML-Parameter (&) – dies ist korrekt escaped, aber irrelevant für den Fehler.
  • Der Fehler stammt aus einer benutzerdefinierten Logik in /public/index.php (Zeile 21), die vermutlich eine TYPO3-Extension oder ein Custom-Skript ist, das externe Daten abruft.

Sekundäre Ursachen (mögliche Kontextfaktoren):

  • Kein Timeout-Handling für die file_get_contents()-Anfrage (Standard-Timeout in PHP ist oft zu lang oder nicht definiert).
  • Keine Fehlerbehandlung für HTTP-Statuscodes (z. B. 503, 404, 401).
  • Fehlende Caching-Strategie für externe Anfragen (wiederholte Anfragen bei jedem Seitenaufruf).
  • SSL/TLS-Probleme (z. B. Zertifikatsvalidierung, unsichere Protokolle) – weniger wahrscheinlich, da der Fehler 503 und nicht 0 (SSL-Fehler) ist.

2. Fix beschreiben (konkret)

Kurzfristige Lösung (Quick Fix)

Ersetze file_get_contents() durch eine robustere HTTP-Client-Lösung mit Fehlerbehandlung und Timeout:

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

try {
    $client = new Client([
        'timeout'  => 5, // 5 Sekunden Timeout
        'verify'   => true, // SSL-Zertifikat prüfen
        'headers'  => ['Accept' => 'application/json'] // Falls API JSON erwartet
    ]);

    $response = $client->get('https://rietberg.ratsinfomanagement.net/webservice/portal/getSearch', [
        'query' => [
            'type'      => 1,
            'maxOccurs' => -1,
            'terms'     => 'Sozialamt'
        ]
    ]);

    $data = json_decode($response->getBody(), true);
    // Weiterverarbeitung der Daten...

} catch (RequestException $e) {
    // Loggen des Fehlers (z. B. mit TYPO3 Logger)
    \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Log\LogManager::class)
        ->getLogger(__CLASS__)
        ->error('Externe API-Anfrage fehlgeschlagen: ' . $e->getMessage());

    // Fallback: Leere Daten oder Cache-Wert zurückgeben
    $data = [];
}

Langfristige Lösung (Best Practices)

  1. HTTP-Client mit Retry-Logik:

    • Nutze Guzzle mit Retry Middleware, um bei 503-Fehlern automatisch neu zu versuchen.
    • Beispiel:
      $client = new Client([
          'timeout' => 5,
          'retries' => 2, // 2 Wiederholungsversuche
      ]);
      
  2. Caching implementieren:

    • Speichere die API-Antworten im TYPO3-Cache (z. B. mit CacheManager):
      $cache = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Cache\CacheManager::class)->getCache('my_api_cache');
      $cacheIdentifier = md5('api_search_' . $searchTerm);
      
      if ($cache->has($cacheIdentifier)) {
          $data = $cache->get($cacheIdentifier);
      } else {
          // API-Anfrage durchführen und Ergebnis cachen
          $data = $client->get(...)->getBody();
          $cache->set($cacheIdentifier, $data, [], 3600); // 1 Stunde Cache
      }
      
  3. Fehlerbehandlung für HTTP-Statuscodes:

    • Prüfe explizit auf Statuscodes wie 503 und handle sie separat:
      if ($response->getStatusCode() === 503) {
          // Wartungsmodus des Zielservers: Fallback-Daten laden oder Fehlermeldung anzeigen
      }
      
  4. Konfiguration in TYPO3:

    • Lagere die API-URL in die TYPO3-Konfiguration (typo3conf/AdditionalConfiguration.php oder Site-Konfiguration) aus, um sie zentral zu verwalten:
      $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['my_extension']['api_url'] = 'https://rietberg.ratsinfomanagement.net/webservice/portal/';
      
  5. Asynchrone Verarbeitung (optional):

    • Für performanzkritische Anwendungen: Nutze TYPO3 Scheduler oder Symfony Messenger, um API-Anfragen im Hintergrund zu verarbeiten.

3. Betroffene TYPO3 Extension nennen

Der Fehler stammt nicht aus dem TYPO3-Core, sondern aus einer benutzerdefinierten Extension oder einem Custom-Skript im Projekt:

  • Pfad: /public/index.php (Zeile 21) – dies ist ungewöhnlich, da TYPO3 normalerweise keine Logik in index.php hat.
  • Verdacht:
    • Eine Custom-Extension (z. B. ext:my_custom_api_integration) oder ein Site-Package, das externe Daten abruft.
    • Alternativ: Ein Hook/Event-Listener in einer Extension, der die API-Anfrage triggert.

Empfehlung:

  • Suche nach der Extension, die file_get_contents() mit der URL rietberg.ratsinfomanagement.net verwendet.
  • Prüfe die Extension-Konfiguration (ext_localconf.php, ext_tables.php) oder TypoScript auf API-Aufrufe.
  • Falls keine Extension gefunden wird: Prüfe Custom-Skripte im typo3conf/ext/ oder public/ Verzeichnis.

4. Confidence

  • Ursache (503-Fehler): 100% (klar durch Fehlermeldung).
  • Betroffene Extension: 80% (da der Fehler aus /public/index.php kommt, aber die genaue Extension unbekannt ist).
  • Fix-Empfehlung: 95% (Guzzle + Caching + Fehlerbehandlung sind bewährte Lösungen für externe API-Anfragen in TYPO3).

Zusammenfassung der nächsten Schritte

  1. Extension identifizieren: Suche nach file_get_contents() in /public/index.php oder im Extension-Code.
  2. Code anpassen: Ersetze file_get_contents() durch Guzzle mit Fehlerbehandlung (siehe Fix oben).
  3. Caching einbauen: Vermeide wiederholte API-Anfragen.
  4. Monitoring: Logge API-Fehler (z. B. mit TYPO3 Logger) und richte Alerts ein.
  5. Dokumentation: Notiere die API-Abhängigkeit und mögliche Downtimes im Projekt-Wiki.

Falls die Extension nicht gefunden wird, könnte auch ein TYPO3-Command-Controller oder ein Scheduler-Task die API-Anfrage auslösen – hier wäre eine Suche nach file_get_contents() im gesamten Projekt notwendig.

Nichts anzuzeigen

Aktionen

Auch abrufbar als: Atom PDF