Start · Sprachen · PHP · Referenz · LuaException

LuaException

Klasse

Ausnahme, die von der PHP-Lua-Erweiterung ausgelöst wird, wenn bei der Ausführung von Lua-Code oder bei Lua-spezifischen Operationen ein Fehler auftritt.

Kategorie: error

Signatur

class LuaException extends RuntimeException

Beschreibung

LuaException ist die zentrale Fehlerklasse der PHP-Lua-PECL-Erweiterung. Sie wird immer dann ausgelöst, wenn die Lua-Laufzeitumgebung einen Fehler meldet – etwa bei Syntaxfehlern im Lua-Skript, zur Laufzeit auftretenden Lua-Fehlern oder bei ungültigen Aufrufen der Erweiterungsfunktionen.

Da LuaException von RuntimeException erbt, stehen alle bekannten Methoden wie getMessage(), getCode(), getFile(), getLine() und getTrace() zur Verfügung. Damit lässt sich der Fehler genau lokalisieren und protokollieren.

Typischerweise umschließt man alle Aufrufe der Lua-Klasse (z. B. Lua::eval() oder Lua::assign()) mit einem try/catch-Block, der explizit LuaException abfängt. So kann PHP-seitig sauber auf Fehler im Lua-Code reagiert werden, ohne dass das gesamte Skript abbricht.

Die Erweiterung ist über PECL verfügbar und muss separat installiert werden. Sie ist nicht Teil der PHP-Standardinstallation.

Beispiele

Lua-Syntaxfehler abfangen

<?php
// Voraussetzung: PECL-Erweiterung 'lua' ist installiert
$lua = new Lua();

try {
    // Ungültiger Lua-Code – fehlendes 'end' beim if-Block
    $lua->eval('if true then print("Hallo")');
} catch (LuaException $e) {
    echo 'Lua-Fehler abgefangen: ' . $e->getMessage() . PHP_EOL;
    echo 'Fehlercode: ' . $e->getCode() . PHP_EOL;
}
Lua-Fehler abgefangen: [string "if true then print("Hallo")"]:1: 'end' expected (to close 'if' at line 1) near '<eof>' Fehlercode: -1

Lua-Laufzeitfehler behandeln und protokollieren

<?php
$lua = new Lua();

function ausführeLuaSkript(Lua $lua, string $skript): mixed
{
    try {
        return $lua->eval($skript);
    } catch (LuaException $e) {
        error_log(sprintf(
            'LuaException in %s (Zeile %d): %s',
            $e->getFile(),
            $e->getLine(),
            $e->getMessage()
        ));
        // Sicherer Standardwert zurückgeben
        return null;
    }
}

$ergebnis = ausführeLuaSkript($lua, 'return 6 * 7');
echo $ergebnis !== null ? 'Ergebnis: ' . $ergebnis : 'Lua-Skript fehlgeschlagen';

$fehlerhaft = ausführeLuaSkript($lua, 'return nichtDefinierteVariable()');
echo PHP_EOL . ($fehlerhaft !== null ? 'Ergebnis: ' . $fehlerhaft : 'Lua-Skript fehlgeschlagen');
Ergebnis: 42 Lua-Skript fehlgeschlagen

// Wichtig · Fallstricke

Installation: Die Lua-Erweiterung ist kein Bestandteil von PHP selbst und muss über PECL installiert werden (pecl install lua). Außerdem muss die Lua-Bibliothek auf dem System vorhanden sein.

Sicherheit: Wird Lua-Code ausgeführt, der aus Benutzereingaben stammt, besteht ein erhebliches Sicherheitsrisiko. Lua-Skripte haben innerhalb der PHP-Umgebung Zugriff auf die registrierten PHP-Callbacks und können potenziell unerwünschte Operationen auslösen. Benutzereingaben sollten niemals ungefiltert als Lua-Code ausgeführt werden.

Kompatibilität: Die Erweiterung unterstützt je nach Version Lua 5.1 oder 5.3. Die genaue Fehlerausgabe im Exception-Message kann je nach Lua-Version leicht variieren.