Start · Sprachen · PHP · Referenz · Yar_Server_Protocol_Exception

Yar_Server_Protocol_Exception

Klasse

Wird ausgelöst, wenn auf der Yar-Serverseite ein Protokollfehler auftritt, z. B. bei ungültigen oder nicht unterstützten Paketformaten.

seit PHP 1.0.0 Kategorie: error

Signatur

class Yar_Server_Protocol_Exception extends Yar_Server_Exception

Beschreibung

Yar_Server_Protocol_Exception ist eine spezialisierte Ausnahme innerhalb des Yar-RPC-Frameworks (Yet Another RPC Framework) für PHP. Sie wird ausgelöst, wenn der Yar-Server einen eingehenden RPC-Aufruf empfängt, dessen Protokoll nicht korrekt interpretiert werden kann – etwa wenn das Datenpaket beschädigt ist, das verwendete Paketformat unbekannt ist oder die Protokollversion nicht unterstützt wird.

Die Klasse erbt von Yar_Server_Exception, welche wiederum von der Standard-PHP-Klasse Exception abstammt. Dadurch stehen alle bekannten Methoden wie getMessage(), getCode() und getTrace() zur Verfügung.

In der Praxis sollte diese Ausnahme auf der Serverseite abgefangen werden, um Protokollfehler gezielt behandeln und von anderen RPC-Fehlern unterscheiden zu können. Typische Ursachen sind inkompatible Client-Versionen, fehlerhafte Serialisierungsformate oder manipulierte Anfragen.

  • Protokollinkompatibilität: Client und Server verwenden unterschiedliche Yar-Protokollversionen.
  • Ungültiges Paket: Das empfangene Datenpaket entspricht nicht dem erwarteten Yar-Format.
  • Nicht unterstützter Packer: Der angeforderte Serializer (z. B. JSON, Msgpack) ist serverseitig nicht verfügbar.

Beispiele

Protokollfehler auf dem Yar-Server abfangen

<?php
// server.php

class MathService
{
    public function add(int $a, int $b): int
    {
        return $a + $b;
    }
}

try {
    $server = new Yar_Server(new MathService());
    $server->handle();
} catch (Yar_Server_Protocol_Exception $e) {
    // Protokollfehler gezielt behandeln
    error_log('Yar Protokollfehler: ' . $e->getMessage() . ' (Code: ' . $e->getCode() . ')');
    http_response_code(400);
    echo 'Protokollfehler: Ungültiges oder inkompatibles RPC-Paket.';
} catch (Yar_Server_Exception $e) {
    // Allgemeinen Yar-Serverfehler behandeln
    error_log('Yar Serverfehler: ' . $e->getMessage());
} catch (Exception $e) {
    error_log('Allgemeiner Fehler: ' . $e->getMessage());
}

Unterscheidung verschiedener Yar-Serverausnahmen

<?php
// Beispiel zur Veranschaulichung der Ausnahme-Hierarchie

function handleYarException(Yar_Server_Exception $e): void
{
    if ($e instanceof Yar_Server_Protocol_Exception) {
        echo 'Protokollfehler erkannt: ' . $e->getMessage() . PHP_EOL;
        echo 'Fehlercode: ' . $e->getCode() . PHP_EOL;
    } elseif ($e instanceof Yar_Server_Request_Exception) {
        echo 'Anfragefehler erkannt: ' . $e->getMessage() . PHP_EOL;
    } else {
        echo 'Allgemeiner Yar-Serverfehler: ' . $e->getMessage() . PHP_EOL;
    }
}

// Im realen Betrieb würde diese Ausnahme vom Yar-Server selbst geworfen;
// hier zur Demonstration manuell erzeugt:
try {
    throw new Yar_Server_Protocol_Exception('Unsupported packager', YAR_ERR_PROTOCOL);
} catch (Yar_Server_Exception $e) {
    handleYarException($e);
}
Protokollfehler erkannt: Unsupported packager Fehlercode: 4

// Wichtig · Fallstricke

Sicherheitshinweis: Protokollfehler können auch durch absichtlich manipulierte Anfragen ausgelöst werden. Es empfiehlt sich, detaillierte Fehlermeldungen nur intern zu protokollieren und dem Client lediglich eine generische Fehlermeldung zurückzugeben, um keine internen Implementierungsdetails preiszugeben.

Verfügbarkeit: Die Klasse ist nur verfügbar, wenn die Yar-PECL-Erweiterung installiert ist. Die genauen Fehlercodes (z. B. YAR_ERR_PROTOCOL) sind als Konstanten der Yar-Erweiterung definiert und können je nach Version variieren.

Hinweis zur Vererbung: Da Yar_Server_Protocol_Exception von Yar_Server_Exception erbt, kann sie mit einem allgemeinen catch(Yar_Server_Exception $e)-Block abgefangen werden. Für eine spezifische Behandlung sollte der spezialisierte Block jedoch zuerst stehen.