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.