Signatur
Beschreibung
LuaSandboxSyntaxError ist eine Ausnahme-Klasse, die geworfen wird, wenn Lua-Code, der über LuaSandbox::loadString() oder verwandte Methoden übergeben wird, einen Syntaxfehler enthält. Sie erweitert LuaSandboxError und ermöglicht es, gezielt auf Syntaxprobleme im Lua-Quellcode zu reagieren.
Die Klasse ist Teil der LuaSandbox-PHP-Erweiterung, die eine sichere Ausführungsumgebung für Lua-Skripte in PHP bereitstellt. Durch das Fangen von LuaSandboxSyntaxError lassen sich fehlerhafte Lua-Eingaben vom Benutzer oder aus externen Quellen von anderen Laufzeitfehlern unterscheiden.
Typische Anwendungsfälle sind Validierung von Benutzereingaben (z. B. in Wiki-Systemen wie MediaWiki), Debugging von dynamisch generiertem Lua-Code sowie die benutzerfreundliche Fehlerausgabe bei fehlerhaften Lua-Skripten. Die Fehlermeldung enthält in der Regel Position und Beschreibung des Syntaxfehlers.
Beispiele
Syntaxfehler in Lua-Code abfangen
<?php
// LuaSandbox-Erweiterung muss installiert sein
$sandbox = new LuaSandbox();
$sandbox->setMemoryLimit(50 * 1024 * 1024);
$sandbox->setCPULimit(10);
$luaCode = 'function broken( return "fehlt etwas" end'; // ungültiger Lua-Code
try {
$sandbox->loadString($luaCode);
} catch (LuaSandboxSyntaxError $e) {
echo 'Lua-Syntaxfehler gefunden: ' . $e->getMessage() . PHP_EOL;
} catch (LuaSandboxError $e) {
echo 'Anderer LuaSandbox-Fehler: ' . $e->getMessage() . PHP_EOL;
}
Lua-Eingabe vom Benutzer validieren
<?php
function validateLuaCode(string $code): bool {
$sandbox = new LuaSandbox();
$sandbox->setMemoryLimit(10 * 1024 * 1024);
$sandbox->setCPULimit(2);
try {
$sandbox->loadString($code);
return true;
} catch (LuaSandboxSyntaxError $e) {
echo 'Ungültiger Lua-Code: ' . $e->getMessage() . PHP_EOL;
return false;
}
}
$valid = validateLuaCode('return 1 + 2');
$invalid = validateLuaCode('return 1 +');
var_dump($valid, $invalid);
// Wichtig · Fallstricke
Voraussetzung: Die LuaSandbox-PHP-Erweiterung muss installiert und aktiviert sein (z. B. per PECL oder als Teil von MediaWiki). Sie ist nicht standardmäßig in PHP enthalten.
Beim Fangen von Lua-Fehlern empfiehlt es sich, die Hierarchie zu beachten: LuaSandboxSyntaxError → LuaSandboxError → Exception. Spezifischere Catch-Blöcke sollten immer vor allgemeineren stehen.
Die Fehlermeldungen enthalten häufig Zeilennummern und Positionsangaben im Lua-Code; diese sollten bei der Ausgabe an den Endnutzer gegebenenfalls bereinigt oder eingeschränkt werden, um interne Details nicht preiszugeben.