Signatur
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;
}
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;
}
// 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.