Bug #105
offen[Bugsink] ErrorException: Warning: file_get_contents(https://rietberg.ratsinfomanagement.net/webservice/portal/getSearch?type=1&maxOccurs=-1&terms=wind…
0%
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 eineErrorException, 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. mitget_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. -
curlist 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.phpoderext_tables.phpin 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.phpkommt, 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:
-
Auf
curloder TYPO3 HTTP-Client umstellen (robuster alsfile_get_contents()). - Fehlerbehandlung implementieren (Retry, Fallback, Logging).
- Cache nutzen, falls die Daten nicht in Echtzeit benötigt werden.
- 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