Signatur
Beschreibung
VarnishException ist die spezifische Ausnahmeklasse der PECL-Erweiterung varnish. Sie wird ausgelöst, wenn Operationen auf einem VarnishAdmin- oder VarnishStat-Objekt fehlschlagen – etwa wenn die Verbindung zum Varnish-Management-Port nicht hergestellt werden kann, die Authentifizierung scheitert oder ein ungültiger Befehl übermittelt wird.
Da VarnishException von RuntimeException erbt, stehen alle üblichen Methoden wie getMessage(), getCode(), getFile() und getTrace() zur Verfügung. Der Fehlercode entspricht dabei in der Regel dem vom Varnish-Daemon zurückgelieferten Statuscode.
Es empfiehlt sich, alle Aufrufe von Varnish-Methoden in einen try/catch-Block zu kapseln und VarnishException explizit abzufangen, um Verbindungsprobleme oder Konfigurationsfehler sauber behandeln zu können, ohne die gesamte Anwendung zum Absturz zu bringen.
Beispiele
VarnishException beim Verbindungsaufbau abfangen
<?php
try {
$varnish = new VarnishAdmin([
VARNISH_CONFIG_HOST => '127.0.0.1',
VARNISH_CONFIG_PORT => 6082,
VARNISH_CONFIG_SECRET => 'geheimes-passwort',
VARNISH_CONFIG_TIMEOUT => 5,
]);
$varnish->connect();
$varnish->auth();
echo "Verbindung zu Varnish erfolgreich hergestellt.\n";
} catch (VarnishException $e) {
echo "Varnish-Fehler (Code " . $e->getCode() . "): " . $e->getMessage() . "\n";
}
Cache-Bereinigung mit Fehlerbehandlung
<?php
try {
$varnish = new VarnishAdmin([
VARNISH_CONFIG_HOST => '127.0.0.1',
VARNISH_CONFIG_PORT => 6082,
VARNISH_CONFIG_SECRET => 'geheimes-passwort',
VARNISH_CONFIG_TIMEOUT => 5,
VARNISH_CONFIG_COMPAT => 4,
]);
$varnish->connect();
$varnish->auth();
// Alle gecachten Objekte mit dem Tag 'news' bereinigen
$result = $varnish->ban('obj.http.X-Cache-Tags ~ news');
echo "Cache-Bereinigung erfolgreich: " . $result . "\n";
} catch (VarnishException $e) {
// Fehler protokollieren, aber Anwendung weiter laufen lassen
error_log(
sprintf(
'[Varnish] Fehler beim Cache-Bereinigen: [%d] %s in %s:%d',
$e->getCode(),
$e->getMessage(),
$e->getFile(),
$e->getLine()
)
);
echo "Cache-Bereinigung fehlgeschlagen – Anwendung läuft weiter.\n";
}
// Wichtig · Fallstricke
Hinweis zur Erweiterung: VarnishException ist Teil der PECL-Erweiterung varnish, die separat installiert werden muss (pecl install varnish). Die Klasse steht nur zur Verfügung, wenn diese Erweiterung geladen ist.
Fehlercode: Der von getCode() gelieferte Wert entspricht dem Varnish-internen Statuscode (z. B. 107 für Verbindungsfehler, 400 für ungültige Anfragen). Diese Codes können je nach Varnish-Version variieren.
Kompatibilität: Die Varnish-PECL-Erweiterung unterstützt Varnish 3.x und 4.x, jedoch nicht alle neueren Versionen (5+). Prüfe die Kompatibilität mit deiner eingesetzten Varnish-Version, bevor du die Erweiterung einsetzt.