Start · Sprachen · PHP · Referenz · SolrClientException

SolrClientException

Klasse

Wird ausgelöst, wenn bei einer Client-seitigen Anforderung an den Solr-Server ein Fehler auftritt, z. B. bei Verbindungsproblemen oder ungültigen Anfrageparametern.

seit PHP 0.9.2 Kategorie: error

Signatur

class SolrClientException extends SolrException

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;
}
Client-Fehler: Failed to connect to host.

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;
}
Solr-Abfrage fehlgeschlagen – siehe Error-Log.

// 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.