Start · Sprachen · PHP · Referenz · V8JsException

V8JsException

Klasse

Ausnahme, die bei Laufzeitfehlern oder JavaScript-Fehlern in der <code>V8Js</code>-Erweiterung ausgelöst wird.

Kategorie: error

Signatur

class V8JsException extends RuntimeException

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;
}
Nachricht: V8Js::executeString():1: ReferenceError: undefinedFunction is not defined JS-Datei: meinSkript.js JS-Zeile: 1 Quellzeile: undefinedFunction(); JS-Trace: ReferenceError: undefinedFunction is not defined at meinSkript.js:1:1

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;
}
JavaScript-Syntaxfehler in Zeile 1: V8Js::executeString():1: SyntaxError: Unexpected token {

// 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.