Start · Sprachen · PHP · Referenz · Yar_Server_Packager_Exception

Yar_Server_Packager_Exception

Klasse

Wird ausgelöst, wenn ein Fehler beim Verpacken (Packaging) von Daten auf der Yar-Serverseite auftritt.

seit PHP 2.0.0 Kategorie: error

Signatur

class Yar_Server_Packager_Exception extends Yar_Server_Exception

Beschreibung

Yar_Server_Packager_Exception ist eine Ausnahme, die von der Yar-Erweiterung geworfen wird, wenn der Server beim Serialisieren bzw. Verpacken von Antwortdaten auf einen Fehler stößt. Yar (Yet Another RPC Framework) verwendet verschiedene Packager wie JSON, Msgpack oder PHP, um Daten zwischen Client und Server zu übertragen.

Ein typischer Auslöser ist die Unfähigkeit des konfigurierten Packagers, die Antwortdaten zu serialisieren – zum Beispiel bei nicht serialisierbaren PHP-Objekten oder wenn ein benötigter Packager (z. B. msgpack) nicht installiert ist. Die Ausnahme erbt von Yar_Server_Exception und damit letztlich von Exception, kann also mit dem normalen try/catch-Mechanismus abgefangen werden.

Um Packaging-Fehler gezielt zu behandeln, empfiehlt es sich, Yar_Server_Packager_Exception explizit zu fangen und dem Client eine verständliche Fehlermeldung zurückzugeben, anstatt den Server mit einem unkontrollierten Fehler abbrechen zu lassen.

Beispiele

Packaging-Exception auf dem Yar-Server abfangen

<?php
// server.php
class MyService {
    public function getData(): array {
        // Gibt normale Daten zurück
        return ['status' => 'ok', 'value' => 42];
    }

    public function getBrokenData() {
        // Gibt eine Ressource zurück – nicht serialisierbar mit JSON-Packager
        return fopen('php://memory', 'r');
    }
}

try {
    $server = new Yar_Server(new MyService());
    $server->handle();
} catch (Yar_Server_Packager_Exception $e) {
    // Packaging-Fehler explizit abfangen
    error_log('Yar Packaging-Fehler: ' . $e->getMessage());
    http_response_code(500);
    echo json_encode(['error' => 'Packaging fehlgeschlagen: ' . $e->getMessage()]);
} catch (Yar_Server_Exception $e) {
    // Allgemeine Yar-Server-Fehler
    error_log('Yar Server-Fehler: ' . $e->getMessage());
}

Unterschiedliche Yar-Ausnahmetypen hierarchisch behandeln

<?php
// Hierarchische Fehlerbehandlung für einen Yar-Server
class CalculatorService {
    public function divide(float $a, float $b): float {
        if ($b === 0.0) {
            throw new InvalidArgumentException('Division durch Null ist nicht erlaubt.');
        }
        return $a / $b;
    }
}

try {
    $server = new Yar_Server(new CalculatorService());
    $server->handle();
} catch (Yar_Server_Packager_Exception $e) {
    // Spezifischer Packaging-Fehler
    error_log('[Packager] ' . $e->getMessage() . ' (Code: ' . $e->getCode() . ')');
} catch (Yar_Server_Exception $e) {
    // Sonstige Server-seitige Yar-Ausnahmen
    error_log('[Yar Server] ' . $e->getMessage());
} catch (Exception $e) {
    // Alle anderen Ausnahmen
    error_log('[Allgemein] ' . $e->getMessage());
}

// Wichtig · Fallstricke

Verfügbarkeit des Packagers prüfen: Wenn der msgpack-Packager konfiguriert ist, muss die PHP-Erweiterung msgpack installiert sein. Fehlt sie, wird eine Yar_Server_Packager_Exception ausgelöst. Prüfen Sie die Erweiterung mit extension_loaded('msgpack').

Nicht serialisierbare Typen: PHP-Ressourcen (z. B. Datei-Handles) sowie Objekte ohne __sleep()- oder __serialize()-Methode können beim Verpacken Fehler verursachen. Stellen Sie sicher, dass alle Rückgabewerte der RPC-Methoden vollständig serialisierbar sind.

Die Klasse selbst bietet keine eigenen Methoden über die von Exception geerbten hinaus (getMessage(), getCode(), getTrace() etc.).