mit exec() .exe im Hintergrund ausführen WINDOWS
Dred
- php
Ich suche nach einer Möglichkeit meine .exe (hier eine aus einem Matlab-Script kompilierte .exe [Matlabe Compiler Runtime]) auszuführen. Da diese 4-20 Sekunden benötigt, soll dies im Hintergrund geschehen.
Die Fertigstellung der produzierten Dateien des Programms möchte ich mit Ajax überprüfen.
Das php-Script, welches den exec()-Befehl enthält, soll also einfach weiterlaufen.
Ich finde leider nur Anweisungen für LINUX-Systeme.
Irgendwie soll man da
> /dev/null 2>&1 &
an den Command anhängen. Gibt es da eine Entsprechung für WINDOWS?
Ich könnte auch eine Batch erstellen, die die exe aufruft. Vorraussgesetzt es untersützt Parameter.
Nur dort habe ich doch das gleiche Problem.
Brauche einen kleinen Denkansatz.
+Dred
Hi,
probier mal "start <command.exe>".
Grüße
exec("start D:\mydir\matlabscript.exe ".$par1);
klappt zwar (die outputs durch die matlabscript.exe werden erstellt) aber das php script wartet auch hier...
Ich habe es jetzt ganz anders gemacht. Es scheint grundsätzlich nicht erwünscht zu sein, dass php unabhängig von den aufgerufenen Programmen laufen soll. Das Warten auf einen gerufenen Prozess scheint wohl eher gewünscht zu sein.
Daher habe ich nun, wie in einem Tipp aus einem Forum vorgeschlagen, alles in eine weitere php verlagert, die per asynchronem Request aufgerufen wird. Hat auch gleich den Vorteil, dass ich den Prozess mehrmals aufrufen kann, ohne die Seite neu zu laden. Z.B. wenn ich den Request auf einen Button lege.
Grüße
+Dred
Wenn man den Hinweis im Manual beachten möchte:
#"Beachten Sie auch, dass wenn Sie ein Programm mit dieser Funktion starten und Sie es im Hintergrund laufen lassen möchten, Sie sicherstellen müssen, dass die Ausgabe des Programms in eine Datei oder anderenen Ausgabestream umgeleitet wird. Andernfalls wird PHP solange laufen, bis das Programm beendet ist. "#
könnte man ja schreiben:
$matlab = "C:\\script.exe";
exec($matlab." >nul", $a, $b);
und tatsächlich bleiben dann auch $a und $b leer. Es scheint also etwas zu bewirken, nur nicht, dass die Exe im Hintergrund ausgeführt wird, da immer noch die ganze Seite für Sekunden einfriert.
Ideen?
+Dred