Start · Sprachen · PHP · Referenz · LuaSandboxRuntimeError

LuaSandboxRuntimeError

Klasse

Repräsentiert einen Laufzeitfehler, der während der Ausführung von Lua-Code innerhalb einer <code>LuaSandbox</code>-Instanz aufgetreten ist.

seit PHP 1.0.0 Kategorie: error

Signatur

class LuaSandboxRuntimeError extends LuaSandboxError

Beschreibung

LuaSandboxRuntimeError wird geworfen, wenn beim Ausführen von Lua-Code in einer LuaSandbox-Umgebung ein Laufzeitfehler auftritt – zum Beispiel, wenn Lua-Code eine nicht definierte Variable aufruft, eine ungültige Operation durchführt oder explizit error() aufruft. Diese Klasse erbt von LuaSandboxError, die wiederum von der PHP-Standardklasse Exception abstammt.

Der Laufzeitfehler enthält in der Regel eine Fehlermeldung aus dem Lua-Interpreter, die über die Standard-Exception-Methoden wie getMessage() abgerufen werden kann. So lässt sich gezielt auf Fehler reagieren, die aus dem Lua-Code selbst stammen, und diese von anderen Fehlertypen (z. B. LuaSandboxSyntaxError für Syntaxfehler) unterscheiden.

Diese Ausnahme ist besonders nützlich, wenn Lua-Code aus externen oder nicht vertrauenswürdigen Quellen stammt und eine robuste Fehlerbehandlung gewährleistet werden muss. Durch das gezielte Abfangen von LuaSandboxRuntimeError können Anwendungen klar zwischen Eingabefehlern des Lua-Codes und PHP-seitigen Fehlern unterscheiden.

Beispiele

Laufzeitfehler in Lua abfangen

<?php
$sandbox = new LuaSandbox();
$sandbox->setMemoryLimit(50 * 1024 * 1024);

$luaCode = '
    -- Versuch, eine nicht definierte Funktion aufzurufen
    return undefinedFunction(42)
';

try {
    $result = $sandbox->loadString($luaCode)->call();
} catch (LuaSandboxRuntimeError $e) {
    echo 'Lua-Laufzeitfehler: ' . $e->getMessage() . PHP_EOL;
} catch (LuaSandboxError $e) {
    echo 'Allgemeiner LuaSandbox-Fehler: ' . $e->getMessage() . PHP_EOL;
}
Lua-Laufzeitfehler: [string "..."]:3: attempt to call a nil value (global 'undefinedFunction')

Expliziter error()-Aufruf in Lua abfangen

<?php
$sandbox = new LuaSandbox();
$sandbox->setMemoryLimit(50 * 1024 * 1024);

$luaCode = '
    local x = 5
    if x > 3 then
        error("Wert ist zu groß: " .. x)
    end
    return x
';

try {
    $result = $sandbox->loadString($luaCode)->call();
    echo 'Ergebnis: ' . $result[0] . PHP_EOL;
} catch (LuaSandboxRuntimeError $e) {
    echo 'Lua hat einen Fehler geworfen: ' . $e->getMessage() . PHP_EOL;
}
Lua hat einen Fehler geworfen: [string "..."]:4: Wert ist zu groß: 5

// Wichtig · Fallstricke

Unterschied zu anderen Fehlerklassen: LuaSandboxRuntimeError sollte nicht mit LuaSandboxSyntaxError (ungültige Lua-Syntax) oder LuaSandboxTimeoutError (Zeitüberschreitung) verwechselt werden. Für eine vollständige Fehlerbehandlung empfiehlt es sich, alle drei Typen gezielt abzufangen.

Erweiterung: Die Klasse erbt alle Standardmethoden von Exception, wie getMessage(), getCode(), getFile() und getTrace(). Die Fehlermeldung entspricht typischerweise der Lua-Fehlermeldung inklusive Zeilennummerangabe innerhalb des Lua-Codes.

Sicherheitshinweis: Lua-Fehlermeldungen können potenziell sensible Informationen über die Lua-Umgebung enthalten. Fehlermeldungen sollten daher nicht ungeprüft an Endbenutzer ausgegeben werden.