Signatur
Beschreibung
SolrException ist die gemeinsame Elternklasse aller Ausnahmen, die von den Klassen der PECL-Solr-Erweiterung geworfen werden. Da sie von RuntimeException erbt, kann sie entweder direkt oder über deren Elternklassen (Exception) abgefangen werden.
Durch das Abfangen von SolrException lassen sich alle Fehler, die beim Kommunizieren mit einem Apache-Solr-Server auftreten – sei es ein Verbindungsfehler, ein ungültiges Dokument oder eine fehlerhafte Abfrage – zentral behandeln, ohne jede Unterklasse einzeln aufzuführen.
Typische Unterklassen sind SolrClientException (Fehler auf Client-Seite, z. B. ungültige Parameter), SolrServerException (Fehlerantworten des Solr-Servers) und SolrIllegalArgumentException. Durch das Abfangen von SolrException werden all diese Fehlertypen erfasst.
Die Klasse stellt zusätzlich zur Standard-Exception-Schnittstelle die Methode getInternalInfo() bereit, die interne Diagnoseinformationen der Erweiterung als Array zurückliefert.
Beispiele
Alle Solr-Fehler zentral abfangen
<?php
try {
$options = [
'hostname' => 'localhost',
'port' => 8983,
'path' => '/solr/mycore',
];
$client = new SolrClient($options);
// Absichtlich eine fehlerhafte Anfrage senden
$query = new SolrQuery();
$query->setQuery('*:*');
$response = $client->query($query);
} catch (SolrServerException $e) {
echo 'Solr-Server-Fehler: ' . $e->getMessage() . PHP_EOL;
print_r($e->getInternalInfo());
} catch (SolrClientException $e) {
echo 'Solr-Client-Fehler: ' . $e->getMessage() . PHP_EOL;
} catch (SolrException $e) {
// Fängt alle übrigen Solr-spezifischen Ausnahmen ab
echo 'Allgemeiner Solr-Fehler: ' . $e->getMessage() . PHP_EOL;
echo 'Code: ' . $e->getCode() . PHP_EOL;
}
Verwendung von getInternalInfo() zur Diagnose
<?php
try {
$client = new SolrClient([
'hostname' => 'nicht-erreichbarer-host',
'port' => 8983,
]);
$client->ping();
} catch (SolrException $e) {
echo 'Fehler: ' . $e->getMessage() . PHP_EOL;
// Interne Erweiterungsinformationen ausgeben
$info = $e->getInternalInfo();
echo 'Datei : ' . ($info['file'] ?? 'n/a') . PHP_EOL;
echo 'Zeile : ' . ($info['line'] ?? 'n/a') . PHP_EOL;
echo 'Methode: ' . ($info['function'] ?? 'n/a') . PHP_EOL;
}
// Wichtig · Fallstricke
Erweiterung erforderlich: Die Klasse steht nur zur Verfügung, wenn die PECL-Erweiterung solr installiert und aktiviert ist (extension=solr in der php.ini). Ohne sie führt jede Referenz auf SolrException zu einem fatalen Fehler.
Fang-Reihenfolge: Spezifischere Unterklassen (SolrServerException, SolrClientException) sollten in catch-Blöcken immer vor SolrException stehen, da PHP den ersten passenden Block verwendet.
getInternalInfo(): Diese Methode liefert erweiterungsinterne Diagnosedaten (Dateiname, Zeilennummer, Funktionsname innerhalb der C-Extension). Die Ausgabe ist für End-Nutzer ungeeignet und sollte nur in Entwicklungs- oder Logging-Szenarien genutzt werden.