Start · Sprachen · PHP · Referenz · Yar_Server_Output_Exception

Yar_Server_Output_Exception

Klasse

Wird ausgelöst, wenn auf der Yar-Serverseite ein Ausgabefehler auftritt, z. B. wenn die Antwort nicht korrekt serialisiert oder übertragen werden kann.

seit PHP 1.0.0 Kategorie: error

Signatur

class Yar_Server_Output_Exception extends Yar_Server_Exception

Beschreibung

Yar_Server_Output_Exception ist eine spezialisierte Ausnahme aus der Yar-PECL-Erweiterung und wird auf der Serverseite eines Yar-RPC-Dienstes geworfen, wenn beim Schreiben oder Serialisieren der Ausgabe ein Fehler auftritt. Sie erbt von Yar_Server_Exception und damit letztlich von Exception.

Typische Auslöser sind Fehler beim Kodieren der Antwortdaten (z. B. nicht serialisierbare Werte), Schreibfehler auf dem Ausgabestream oder inkompatible Paketformate zwischen Server und Client. Durch das Abfangen dieser Ausnahme kann der Server kontrolliert auf Ausgabefehler reagieren, ohne abrupt zu terminieren.

In der Praxis empfiehlt es sich, in der zentralen Fehlerbehandlung des Yar-Servers gezielt auf Yar_Server_Output_Exception zu prüfen, um Ausgabefehler von anderen RPC-Fehlern zu unterscheiden und entsprechend zu protokollieren oder dem Client eine sinnvolle Fehlermeldung zurückzugeben.

Beispiele

Abfangen eines Yar-Server-Ausgabefehlers

<?php
// Beispiel-Service-Klasse für einen Yar-Server
class MyService {
    public function getData(): array {
        // Simuliert ein Ergebnis, das zurückgegeben werden soll
        return ['status' => 'ok', 'value' => 42];
    }
}

try {
    $server = new Yar_Server(new MyService());
    $server->run();
} catch (Yar_Server_Output_Exception $e) {
    // Ausgabefehler auf der Serverseite
    error_log('Yar-Ausgabefehler: ' . $e->getMessage() . ' (Code: ' . $e->getCode() . ')');
    http_response_code(500);
    echo json_encode(['error' => 'Ausgabefehler auf dem RPC-Server']);
} catch (Yar_Server_Exception $e) {
    // Allgemeiner Yar-Serverfehler
    error_log('Yar-Serverfehler: ' . $e->getMessage());
} catch (Exception $e) {
    error_log('Unbekannter Fehler: ' . $e->getMessage());
}

Unterscheidung von Yar-Ausnahmetypen im Fehlerhandler

<?php
function handleYarException(Throwable $e): void {
    if ($e instanceof Yar_Server_Output_Exception) {
        echo 'Ausgabefehler: Antwort konnte nicht gesendet werden.' . PHP_EOL;
        echo 'Fehlercode: ' . $e->getCode() . PHP_EOL;
        echo 'Nachricht:  ' . $e->getMessage() . PHP_EOL;
    } elseif ($e instanceof Yar_Server_Exception) {
        echo 'Allgemeiner RPC-Serverfehler: ' . $e->getMessage() . PHP_EOL;
    } else {
        echo 'Sonstiger Fehler: ' . $e->getMessage() . PHP_EOL;
    }
}

try {
    $server = new Yar_Server(new stdClass());
    $server->run();
} catch (Throwable $e) {
    handleYarException($e);
}

// Wichtig · Fallstricke

Hinweis zur Verfügbarkeit: Yar_Server_Output_Exception ist nur verfügbar, wenn die Yar-PECL-Erweiterung installiert und aktiviert ist. Sie ist nicht Bestandteil des PHP-Kerns.

Da Yar intern verschiedene Serialisierungsformate (Msgpack, JSON, PHP-eigenes Format) unterstützt, können Ausgabefehler durch nicht serialisierbare Datentypen (z. B. Ressourcen, anonyme Klassen ohne Serialisierung) entstehen. Es empfiehlt sich, Rückgabewerte von RPC-Methoden stets auf Serialisierbarkeit zu prüfen.