Projekt

Allgemein

Profil

Aktionen

Bug #105

offen

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

Von Bug Sink vor 4 Tagen hinzugefügt.

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

0%

Geschätzter Aufwand:

Beschreibung

Bugsink: https://bugsink.cytrus.de/issues/issue/c40c8635-0cc6-468d-b233-5fe3a6c15335/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=wind…


Automatisch erstellt durch n8n

KI-Analyse:

Analyse des Fehlers

1. Ursache identifizieren

Der Fehler tritt auf, weil file_get_contents() versucht, eine externe API-URL (https://rietberg.ratsinfomanagement.net/webservice/portal/getSearch) abzurufen, aber der Server antwortet mit einem HTTP 503 Service Unavailable.

  • HTTP 503 bedeutet, dass der Zielserver vorübergehend nicht verfügbar ist (z. B. wegen Wartungsarbeiten, Überlastung oder einer Störung).
  • file_get_contents() wirft in diesem Fall eine ErrorException, weil die HTTP-Anfrage fehlschlägt.
  • Der Fehler stammt aus /public/index.php (Zeile 21), wo die API-Anfrage gestellt wird.

2. Fix beschreiben (konkret)

Mögliche Lösungsansätze:

A) Fehlerbehandlung & Retry-Mechanismus

  • Prüfen, ob die API erreichbar ist, bevor file_get_contents() aufgerufen wird (z. B. mit get_headers()).
  • Retry-Logik einbauen (z. B. 3 Versuche mit Verzögerung).
  • Fallback-Content bereitstellen, falls die API nicht antwortet.

Beispiel-Code:

$url = 'https://rietberg.ratsinfomanagement.net/webservice/portal/getSearch?type=1&maxOccurs=-1&terms=windenergie';
$maxRetries = 3;
$retryDelay = 2; // Sekunden

for ($i = 0; $i < $maxRetries; $i++) {
    $context = stream_context_create([
        'http' => [
            'timeout' => 10, // Timeout in Sekunden
        ],
    ]);

    $response = @file_get_contents($url, false, $context);

    if ($response !== false) {
        break; // Erfolgreich
    }

    if ($i < $maxRetries - 1) {
        sleep($retryDelay);
    }
}

if ($response === false) {
    // Fallback: Leere Antwort oder Cache verwenden
    $response = '[]'; // Beispiel: Leeres JSON-Array
}

B) CURL statt file_get_contents() verwenden

  • file_get_contents() ist nicht ideal für HTTP-Anfragen, da es keine detaillierte Fehlerbehandlung bietet.
  • curl ist robuster und ermöglicht bessere Steuerung (Timeouts, Header, Statuscodes).

Beispiel mit cURL:

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_FAILONERROR, true);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if (curl_errno($ch) || $httpCode !== 200) {
    // Fehlerbehandlung
    $response = '[]'; // Fallback
}

curl_close($ch);

C) TYPO3-spezifische Lösung (Guzzle HTTP Client)

  • TYPO3 nutzt PSR-18 HTTP-Clients (z. B. Guzzle).
  • Empfohlener Ansatz, da er besser in TYPO3 integriert ist.

Beispiel mit TYPO3 HTTP-Client:

use TYPO3\CMS\Core\Http\RequestFactory;

$requestFactory = GeneralUtility::makeInstance(RequestFactory::class);
try {
    $response = $requestFactory->request($url, 'GET', [
        'timeout' => 10,
    ]);
    $responseData = $response->getBody()->getContents();
} catch (\Exception $e) {
    // Fehlerbehandlung
    $responseData = '[]'; // Fallback
}

D) Cache nutzen (falls möglich)

  • Falls die API-Daten nicht in Echtzeit benötigt werden, kann ein Cache (z. B. TYPO3-Cache) verwendet werden.
  • Beispiel:
    $cache = GeneralUtility::makeInstance(CacheManager::class)->getCache('my_cache');
    $cacheIdentifier = 'api_response_' . md5($url);
    
    if ($cache->has($cacheIdentifier)) {
        $response = $cache->get($cacheIdentifier);
    } else {
        $response = file_get_contents($url);
        if ($response !== false) {
            $cache->set($cacheIdentifier, $response, [], 3600); // 1 Stunde Cache
        }
    }
    

3. Betroffene TYPO3 Extension nennen

Der Fehler stammt nicht aus einer TYPO3-Core-Extension, sondern aus einem benutzerdefinierten Skript (/public/index.php).

  • Möglicherweise handelt es sich um eine eigene Extension oder ein Custom-Plugin, das die API abfragt.
  • Falls es eine Extension ist, könnte sie z. B. ext_localconf.php oder ext_tables.php in einem eigenen Verzeichnis haben.

Mögliche Extensions, die betroffen sein könnten:

  • Eine eigene Extension (z. B. ext:my_api_connector)
  • Eine Drittanbieter-Extension, die externe APIs abfragt (z. B. ext:news, ext:solr, ext:api)

4. Confidence (0-100%)

  • Ursache: 100% (HTTP 503 ist klar erkennbar)
  • Fix-Vorschläge: 95% (abhängig von der genauen Implementierung)
  • Betroffene Extension: 80% (da der Fehler aus /public/index.php kommt, könnte es eine Custom-Extension sein)

Zusammenfassung & Empfehlung

Punkt Details
Ursache HTTP 503 Service Unavailable bei API-Abfrage (file_get_contents())
Fix - Fehlerbehandlung (Retry, Fallback)
- cURL oder TYPO3 HTTP-Client statt file_get_contents()
- Cache nutzen (falls möglich)
Betroffene Extension Benutzerdefiniertes Skript (/public/index.php) – möglicherweise eine eigene Extension
Confidence 95%

Empfehlung:

  1. Auf curl oder TYPO3 HTTP-Client umstellen (robuster als file_get_contents()).
  2. Fehlerbehandlung implementieren (Retry, Fallback, Logging).
  3. Cache nutzen, falls die Daten nicht in Echtzeit benötigt werden.
  4. API-Provider kontaktieren, falls der 503-Fehler häufig auftritt.

Falls der Fehler in einer bestimmten Extension auftritt, sollte diese identifiziert und angepasst werden.

Nichts anzuzeigen

Aktionen

Auch abrufbar als: Atom PDF