ScriptHost

Der ScriptHost ist die Klasse \Alvine\Application\Util\ScriptHost für den Zugriff auf das Betriebssystem über Scripte.

Hierzu wird über die Methode \Alvine\Application\Util\ScriptHost::runCommand($command, $args) der Befehl, zum Beispiel pwd übergeben. Als Ergebnis erhält man ein Objekt der Klasse \Alvine\Application\Util\ScriptHost\Result.

Hierüber lässt sich nun auf den Exit-Code \Alvine\Application\Util\ScriptHost\Result::getExitCode() und auf die Ausgabe des Befehls zugreifen \Alvine\Application\Util\ScriptHost\Result::getOutput().

Der ScriptHost verwendet die PHP-Methode exec. Um alle Ausgaben (inkl. Fehler) umzuleiten muss z.B. bei der Verwendung der Bash der Ausgabe-Kanal für die Fehler umgleitet 2>&1 werden.

$scripthost=\Alvine\Application\Util\ScriptHost::getInstance();

$result=$scripthost->runCommand('pw2d 2>&1');

echo $result->getExitCode();
// Exit 0
echo (string) $result;
// Ausgabe von pwd
// /home/<user>

Um von einem Script Rückgabewerte zu bekommen, kann das Script einen Magic-Token [json[{"key":"value"}]] zurückgeben. Dieser Token wird vom ScriptHost analyiert und mit der Methode \Alvine\Application\Util\ScriptHost\Result::getValue("key", $default) kann auf einen Wert zugegriffen werden.

Neben der einfachen Verarbeitung von Befehlen kann der ScriptHost auf eine Bibliothek von Scripten zugreifen. Die Verfügbaren Scripte müssen in der Anwednung im Verzeichnis resource/script/<OS-String> gespeichert sein. Der OS-String ist die Ausgabe von \strtolower(\PHP_OS). Für Linux ist die Zeichenkette linux zu verwenden.

Nur die auf dem Zielsystem verfügbare Scripts stehen dann über den Befehl \Alvine\Application\Util\ScriptHost::runScript($name, $args) zur Verfügung. Somit kann man Scripte für verschiedene Betriebssysteme erstellen, die über einen gemeinsamen Namen Verfügbar sind.

$scripthost=\Alvine\Application\Util\ScriptHost::getInstance();

try {
    $result=$scripthost->runScript('my.script');
} catch(\Alvine\Application\Util\ScriptHost\NotExistsException $e) {
    echo "Script doesn´t exists!";
    exit(1);
}


echo $result->getExitCode();
// Exit 0
echo (string) $result;
// Ausgabe von pwd
// /home/<user>

Für Linux muss in diesem Beispiel im Verzeichnis resource/script/linux das Script my.script (ohne weitere Dateiendung) liegen. Sollte auf Windowssystemen kein Script im Verzeichnis resource/script/win verfügbar sein, so wird unter Windows eine \Alvine\Application\Util\ScriptHost\NotExistsException Exception geworfen.