ausführen .bat-Datei, die von php im hintergrund
Ich versuche ausführen .bat-Datei (Windows Server mit xampp) von php im Hintergrund. Nachdem ich klicken Sie auf die Schaltfläche, es soll auch gehen zu einer anderen Website.
Aber wenn ich auf den button klicken, der browser wartet das Skript zu beenden. Meist ist dies endet in einem timeout.
mein php-code:
if (isset($_POST['test']))
{
exec('C:\Daten\test.bat');
header("Location:test_status.php");
}
wie kann ich den php-exec, zu warten?
Versuchte ich auch Folgendes, aber funktioniert nicht:
exec('C:\Daten\test.bat' . '> /dev/null &');
- Haben Sie versucht
pclose(popen("start /B ". $cmd, "r"));
?? von hier wo$cmd
ist der Befehl, den Sie ausführen möchten. - dies könnte helfen, stackoverflow.com/questions/649634/...
- Verwandte, Wie führe ich ein .bat-Datei von PHP?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Danke für die Antwort, aber das hat nicht funktioniert für mich. Ich fand, dass die Lösung viele Ideen im internet, aber nichts für mich gearbeitet.
Nun habe ich endlich die Lösung gefunden!
Das Schlüsselwort popen! Das funktioniert sehr schön:
Dies tun Sie Folgendes:
popen öffnet sich ein Prozess im hintergrund gestartet wird, dass die batch-Datei, die Ausgabe erfolgt in die Protokolldatei.
Dann müssen Sie es schließen, mit pclose. (der Stapel ist noch im hintergrund läuft)
Danach öffnet sich eine weitere Webseite, in meinem Fall ein "sehen Sie den aktuellen status" auf der website.
Wenn Sie nicht möchten, dass ein Protokoll, können Sie auch output (wie MarkB gesagt) mit >nul. Dies würde beispielsweise so Aussehen:
Und seien Sie vorsichtig mit Leerzeichen im Pfad!
Ich weiß nicht, warum, aber das wird nicht funktionieren:'start /B "C:\Data Ordner\restart_TS3.bat" >nul 2>&1'
In diesen Fällen müssen Sie " in den Ordner so:
Dies funktioniert gut, mit dem leeren Raum in den Ordner-Namen.
Du bist mit Windows. es gibt keine
/dev/null
in Windows (es ist nurnul
), und es gibt keine&
für die Ausführung von Aufträgen in den hintergrund.&
im cmd.exe ist ein Befehl separator. Also dein exec() hängen/warten .Fledermaus fertig zu stellen.Versuchen
statt, starten Sie die batch-Datei als separaten Prozess.
cmd.exe
nicht funktioniert gleichbash
tut 🙂cmd.exe
aufgerufen wird (sowohl auf der ursprünglichen Lösung und diese Antwort). PHP fragt das system zum ausführen einer Datei mit der Erweiterung.bat
, den system-code berät die Windows registry und findet heraus, dass.bat
Dateien übergeben werden, einige Kommando-interpreter für die Ausführung. Es ist standardmäßig Windows'cmd.exe
aber man kann installieren, andere Kommando-interpreter und Dolmetscher können registrieren Sie sich als handler für die Ausführung von.bat
- Dateien.Dieser arbeitete für mich.
start
Schlüsselwort am Anfang beim laufen eineexec
. Auch, wenn Sie möchten, dass Ihreexec
werden async, fügen Sie einfach ein&
am Ende.