Signatur
Beschreibung
V8JsException wird von der V8Js PECL-Erweiterung ausgelöst, wenn bei der Ausführung von JavaScript-Code über die V8Js-Engine ein Fehler auftritt. Das betrifft sowohl Syntaxfehler im JavaScript-Quellcode als auch Laufzeitfehler wie nicht gefangene JavaScript-Ausnahmen.
Da V8JsException von RuntimeException erbt, kann sie mit einem normalen try-catch-Block abgefangen werden. Zusätzlich zu den Standard-Eigenschaften einer Exception stellt sie spezifische Methoden bereit, um Details über den aufgetretenen JavaScript-Fehler abzurufen, wie z. B. den Namen des JavaScript-Fehlers, die Fehlermeldung und den zugehörigen Stack-Trace.
Typische Einsatzgebiete sind serverseitiges JavaScript-Rendering, Template-Engines oder das Ausführen von Skripten in einer gesicherten Sandbox, bei denen fehlerhafte JS-Skripte abgefangen und behandelt werden müssen.
- getJsFileName() – Dateiname des fehlerhaften JavaScript-Skripts
- getJsLineNumber() – Zeilennummer im JavaScript-Code
- getJsSourceLine() – Die fehlerhafte Quellzeile
- getJsTrace() – Der JavaScript-Stack-Trace als String
Beispiele
JavaScript-Fehler abfangen und Details ausgeben
<?php
try {
$v8 = new V8Js();
// Fehlerhafter JavaScript-Code: undefinierte Variable aufrufen
$v8->executeString('undefinedFunction();', 'meinSkript.js');
} catch (V8JsException $e) {
echo 'Nachricht: ' . $e->getMessage() . PHP_EOL;
echo 'JS-Datei: ' . $e->getJsFileName() . PHP_EOL;
echo 'JS-Zeile: ' . $e->getJsLineNumber() . PHP_EOL;
echo 'Quellzeile: ' . $e->getJsSourceLine() . PHP_EOL;
echo 'JS-Trace:' . PHP_EOL . $e->getJsTrace() . PHP_EOL;
}
Syntaxfehler im JavaScript abfangen
<?php
try {
$v8 = new V8Js();
// Ungültige JavaScript-Syntax
$v8->executeString('function broken( { return 42; }', 'broken.js');
} catch (V8JsException $e) {
echo 'JavaScript-Syntaxfehler in Zeile ' . $e->getJsLineNumber() . ': ' . $e->getMessage() . PHP_EOL;
} catch (Exception $e) {
echo 'Allgemeiner Fehler: ' . $e->getMessage() . PHP_EOL;
}
// Wichtig · Fallstricke
Sicherheitshinweis: Beim Ausführen von JavaScript-Code aus nicht vertrauenswürdigen Quellen sollte immer ein try-catch-Block für V8JsException verwendet werden, um unkontrollierte Programmabbrüche zu verhindern. Stellen Sie außerdem sicher, dass Ressourcenlimits (memory_limit, time_limit) für die V8Js-Instanz gesetzt sind, um DoS-Angriffe durch aufwändige Skripte zu vermeiden.
Verfügbarkeit: V8JsException ist nur verfügbar, wenn die v8js-PECL-Erweiterung installiert und aktiviert ist. Ab PHP 8.0 ist die Unterstützung der Erweiterung eingeschränkt; prüfen Sie die Kompatibilität mit Ihrer PHP-Version.
Zusätzlich zu V8JsException gibt es V8JsTimeLimitException und V8JsMemoryLimitException für spezifischere Fehlerszenarien.