Bug #117
offen[Bugsink] ErrorException: Warning: file_get_contents(https://rietberg.ratsinfomanagement.net/webservice/portal/getSearch?type=2&maxOccurs=-1&terms=Hill…
0%
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).
- Falsche Parameter (
- Die API (
-
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).
- Die
2. Fix beschreiben (konkret)¶
Empfohlene Lösung:
-
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.' ); } -
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);
-
API-Parameter prüfen
-
maxOccurs=-1könnte ein Problem sein (evtl. erwartet die API eine positive Zahl oderunlimited). -
terms=Hillemeyerkö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";
-
-
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?
-
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 );
- Falls die API eine Fehlermeldung zurückgibt, diese loggen:
3. Betroffene TYPO3 Extension nennen¶
-
Wahrscheinlichste Ursache:
Der Fehler stammt aus einer benutzerdefinierten Extension, die die API vonratsinfomanagement.netabfragt.- 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.
- Der Stacktrace zeigt, dass der Fehler in
-
Wie man die Extension identifiziert:
- Im Stacktrace nach dem Aufrufpfad suchen:
- Der Fehler wird in
/public/index.phpausgelöst, was darauf hindeutet, dass eine Frontend-Extension (z. B. ein Plugin) die API aufruft.
- Der Fehler wird in
- 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?
- Im Code nach
file_get_contents()suchen:grep -r "file_get_contents.*rietberg.ratsinfomanagement.net" typo3conf/ext/
- Im Stacktrace nach dem Aufrufpfad suchen:
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¶
-
API manuell testen (z. B. mit Postman oder
curl):curl -v "https://rietberg.ratsinfomanagement.net/webservice/portal/getSearch?type=2&maxOccurs=-1&terms=Hillemeyer" -
Parameter prüfen (z. B.
maxOccurs=-1→ evtl.maxOccurs=100testen). - Fehlerbehandlung in der Extension verbessern (siehe Code-Beispiele oben).
- API-Dokumentation anfordern, falls vorhanden.
-
TYPO3-Logs prüfen (
var/log/typo3_*.log) auf weitere Hinweise.
Nichts anzuzeigen