web-dev-qa-db-ger.com

Wie führe ich eine .bat-Datei in PHP aus?

Kann mir jemand sagen, wie man eine .bat-Datei von einem PHP Skript aus ausführt?

Ich habe versucht:

exec("C:\[path to file]");
system("C:\[path to file]");

Nichts funktioniert. Ich habe in den PHP) Handbüchern nachgesehen und mich umgesehen, finde aber keine gute Antwort. Weiß jemand, wo ich falsch liege?

Ich verwende Windows 2003 Server und habe die BAT-Datei erfolgreich manuell ausgeführt. Ich muss es nur programmgesteuert starten können.

41
undefined

Möglicherweise müssen Sie es über cmd ausführen, z. B .:

system("cmd /c C:[path to file]");
52
RichieHindle
<?php
exec('c:\WINDOWS\system32\cmd.exe /c START C:\Program Files\VideoLAN\VLC\vlc.bat');
?>
10
mysoogal

Wenn Sie die Funktion exec() verwenden, ist es so, als ob Sie ein cmd - Terminal geöffnet haben und Befehle direkt eingeben.

Verwenden Sie einfache Anführungszeichen wie dieses $str = exec('start /B Path\to\batch.bat');
Das /B Bedeutet, dass die Fledermaus im Hintergrund ausgeführt wird, der Rest des php wird fortgesetzt, nachdem diese Zeile ausgeführt wurde, im Gegensatz zu $str = exec('start /B /C command', $result);, in der command ausgeführt und dann result zur späteren Verwendung gespeichert wird.

PS: Es funktioniert sowohl für Windows als auch für Linux.
Weitere Details finden Sie hier http://www.php.net/manual/en/function.exec.php :)

9
Migisha
<?php
 pclose(popen("start /B test.bat", "r")); die();
?> 
7
testaa

auf meinem Windows-Computer 8 läuft ein Computer IIS 8 Ich kann die Batch-Datei ausführen, indem ich den Fledermausnamen eingebe und den Pfad dazu vergesse Frag mich nicht, wie es funktioniert, aber es funktioniert. LOL

$ test = Shell_exec ("C:\windows\system32\cmd.exe/c $ streamnumX.bat");

1
calmchess

Dieses Snippet stammt aus dem Arbeitscode.

Sie können bat-Dateien nicht nur über die Windows-Benutzeroberfläche oder den Taskplaner auslösen, sondern auch direkt über das Skript PHP). In den meisten Fällen wird die Ausführung jedoch 30 bis 60 Sekunden dauern PHP Konfiguration. Wenn der Job in der BAT-Datei lang ist und Sie Ihre PHP Skripte nicht einfrieren möchten, müssen Sie den BAT-Job als anderen Prozess verwenden php.exe Und nicht von Apache abhängig sein.

Dies läuft in hintergrund Modus in Windows, gesehen als separate Prozesse cmd.exe und php.exe vom Task-Manager, die Apache PHP= Skripte nicht anhalten. Die von Ihrem Skript erstellten Nachrichten können gespeichert werden und über Protokolldateien zurückgerufen.

In meinem Fall in file_scanner.php Führe ich einige schwere Schleifenberechnungen für große Datenmengen durch, die mit der PHP-Funktion sleep() einige Stunden dauern können, um die CPU nicht zu überlasten.

Der Erfolg ergibt sich aus der Datei $r, Die Sie über Ajax abfragen können, wenn Sie Erfolg oder Fauty-Start wissen wollen. In meinem Fall schreibt file_scanner.php Eine Protokolldatei mit Meldungen somefile.jpg - OK, Die Sie mit AJAX alle paar Sekunden auf Ihre Benutzeroberfläche laden können, um den Fortschritt anzuzeigen.

PHP

/**
 * Runs bat file in background mode
 *
 */
 function run_scanner() {

    $c='start /b D:\Web\example.com\tasks\file_scanner.bat'; 
    $r=pclose(popen($c, 'r')); 
    return json_encode(array('result'=>$r));

 }

BAT

@echo Off
D:\PHP\php.exe D:\Web\example.com\tasks\file_scanner.php > D:\Web\example.com\tasks\file_scanner.log
exit
0
Alex Khimich