Signatur
Beschreibung
SolrClientException ist eine spezialisierte Ausnahme der PECL-Solr-Erweiterung und wird geworfen, wenn der PHP-Client beim Kommunizieren mit dem Apache-Solr-Server auf einen Fehler stößt. Typische Ursachen sind nicht erreichbare Server, fehlerhafte URLs, Timeout-Fehler oder intern ungültige Zustände des SolrClient-Objekts.
Die Klasse erbt von SolrException, welche wiederum von der SPL-Klasse RuntimeException ableitet. Dadurch stehen alle Standard-Methoden wie getMessage(), getCode(), getFile() und getTrace() zur Verfügung. Zusätzlich bietet SolrException die Methode getInternalInfo(), die interne Debug-Informationen zur Ausnahme liefert.
Im Unterschied zur SolrServerException, die einen HTTP-Fehler oder eine Fehlerantwort des Solr-Servers repräsentiert, zeigt SolrClientException an, dass der Fehler auf der PHP-Client-Seite entstanden ist, bevor oder ohne dass eine gültige Server-Antwort vorlag.
Es empfiehlt sich, SolrClientException und SolrServerException in separaten catch-Blöcken zu behandeln, um client- und server-seitige Fehler klar zu unterscheiden und passende Fehlerbehandlungslogiken bereitzustellen.
Beispiele
Grundlegende Fehlerbehandlung bei einer Solr-Abfrage
<?php
$options = [
'hostname' => 'localhost',
'port' => 8983,
'path' => '/solr/mycore',
];
$client = new SolrClient($options);
$query = new SolrQuery('php');
try {
$response = $client->query($query);
$result = $response->getResponse();
echo 'Gefundene Dokumente: ' . $result->response->numFound . PHP_EOL;
} catch (SolrClientException $e) {
// Client-seitiger Fehler (z. B. Verbindung nicht möglich)
echo 'Client-Fehler: ' . $e->getMessage() . PHP_EOL;
echo 'Fehler-Code: ' . $e->getCode() . PHP_EOL;
$info = $e->getInternalInfo();
echo 'Interne Info: ' . print_r($info, true) . PHP_EOL;
} catch (SolrServerException $e) {
// Server-seitiger Fehler (z. B. HTTP 400 / 500)
echo 'Server-Fehler: ' . $e->getMessage() . PHP_EOL;
}
Eigene Klasse, die SolrClientException abfängt und loggt
<?php
function querySolr(SolrClient $client, string $term): ?SolrObject
{
$query = new SolrQuery($term);
$query->setRows(10);
try {
$response = $client->query($query);
return $response->getResponse();
} catch (SolrClientException $e) {
error_log(sprintf(
'[Solr-Client-Fehler] %s in %s:%d',
$e->getMessage(),
$e->getFile(),
$e->getLine()
));
return null;
} catch (SolrServerException $e) {
error_log('[Solr-Server-Fehler] ' . $e->getMessage());
return null;
}
}
$client = new SolrClient(['hostname' => '127.0.0.1', 'port' => 8983, 'path' => '/solr/core1']);
$result = querySolr($client, 'PHP');
if ($result === null) {
echo 'Solr-Abfrage fehlgeschlagen – siehe Error-Log.' . PHP_EOL;
}
// Wichtig · Fallstricke
Unterschied zu SolrServerException: SolrClientException signalisiert Fehler, die auf PHP-Client-Seite entstehen (z. B. keine Verbindung, ungültige Konfiguration), während SolrServerException eine fehlerhafte HTTP-Antwort des Solr-Servers kapselt. Beide sollten stets separat gefangen werden.
PECL-Erweiterung erforderlich: Die Klasse ist nur verfügbar, wenn die PECL-Erweiterung solr installiert und in der php.ini aktiviert ist. Prüfe die Verfügbarkeit mit extension_loaded('solr').
Interne Debug-Infos: Die Methode getInternalInfo() (geerbt von SolrException) liefert ein Array mit Dateiname, Zeilennummer und Funktionsname innerhalb der Erweiterung – nützlich für tiefes Debugging, aber nicht für Endnutzer bestimmt.