Dokumentation
IPS_Execute
string IPS_Execute (string $Programmpfad, string $Parameter, bool $Dummy, bool $Warten)
Parameterliste
| Programmpfad | Vollständiger Pfad zum Programm |
| Parameter | An das Programm zu übergebende Parameter (optional) |
| Dummy | Immer true angeben, Parameter wird nicht ausgewertet, dieser wurde nur in Version 1.x genutzt. |
| Warten | Gibt an, ob auf das Programmende gewartet werden soll. |
Rückgabewert
Die Ausgabe des Programms, wenn der Parameter Warten auf TRUE gesetzt ist: die Ausgabe nach stderr, falls vorhanden, sonst die Ausgabe nach stdout. Ist Warten auf FALSE gesetzt, wird ein leerer String zurückgegeben. Im Fehlerfall (z.B. wenn das Programm nicht existiert oder nicht gestartet werden kann) wird FALSE zurückgegeben.
Beschreibung
Die Funktion veranlasst den Start des externen Programms mit dem Pfad Programmpfad. Dem Programm wird der String Parameter als Aufrufparameter übergeben. Der Boolean-Wert Warten legt fest, ob das Programmende abgewartet oder das aufrufende Skript sofort fortgesetzt werden soll. Der Parameter Dummy wird nicht ausgewertet: IPS_Execute zeigt nie ein Programmfenster an. Soll ein Fenster angezeigt werden, muss IPS_ExecuteEx verwendet werden.
Wird auf das Programmende gewartet, wird die Ausgabe des Programms als String zurückgegeben. Dabei gilt auf allen Betriebssystemen dieselbe Regel:
- Hat das Programm etwas nach stderr ausgegeben, wird diese Ausgabe zurückgegeben, z.B. um Fehlermeldungen nicht zu verlieren. Die Ausgabe nach stdout wird in diesem Fall verworfen.
- Andernfalls wird die Ausgabe nach stdout zurückgegeben (ein leerer String, wenn das Programm nichts ausgegeben hat).
Wird nicht auf das Programmende gewartet, gibt die Funktion immer einen leeren String zurück. Existiert das Programm nicht oder kann es nicht gestartet werden, wird eine Warnung ausgegeben und FALSE zurückgegeben.
Der Exit-Code des Programms steht nicht zur Verfügung. Werden der Exit-Code oder die Ausgaben nach stdout und stderr getrennt benötigt, sollten die PHP-Funktionen exec oder proc_open verwendet werden.
Unterschiede zwischen den Betriebssystemen:
- Windows: Das Programm muss mit vollständigem Pfad angegeben werden. Es wird mit der Befehlszeile
Programmpfad Parametergestartet, Arbeitsverzeichnis ist das Verzeichnis des Programms. - Linux, macOS und SymBox: Ein Programmname ohne Pfad wird in den Verzeichnissen der Umgebungsvariable PATH gesucht. Mit Warten = TRUE wird der Befehl über die Shell ausgeführt (
/bin/sh -c '"Programmpfad" Parameter'), Parameter kann daher Shell-Syntax wie Anführungszeichen, Variablen, Umleitungen oder Pipes enthalten. Mit Warten = FALSE wird das Programm direkt gestartet. Parameter wird dabei wie von der Shell in einzelne Argumente zerlegt (Anführungszeichen und Variablen werden ausgewertet), Umleitungen und Pipes sind jedoch nicht möglich.
Vorsicht: Beim Warten auf das Programmende verlängert sich die Laufzeit des Skripts entsprechend. Skripte haben zwar keine maximale Laufzeit, das Skript belegt aber während des Wartens einen der begrenzt verfügbaren Threads, in denen Skripte ausgeführt werden. Lange laufende Programme sollten daher nicht mit Warten gestartet werden. Dies ist vor allem dann wichtig, wenn das Programm Benutzereingaben erwartet.
Achtung: Wenn das zu startende Programm interaktiv ist (z.B. ein Fenster beinhaltet), wird dieses nicht angezeigt/ sichtbar. Es wird im Hintergrund als System-Prozess gestartet und kann dann nur mit Hilfe des Task-Managers gestoppt werden. Soll das Programm auf dem Desktop angezeigt werden, muss die Funktion IPS_ExecuteEx verwendet werden.
Beispiel
//Eine Batchdatei starten
IPS_Execute("C:/autoexec.bat", "", false, false);