Frage

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

Ich habe versucht:

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

Im Moment arbeitet. Ich habe die PHP-Handbuch überprüft und um gegoogelt aber keine gute Antwort finden. Wer weiß, wo ich falsch gehe?

Ich bin Windows 2003 Server ausgeführt wird und ausgeführt haben erfolgreich manuell die .bat-Datei und es tut, was ich es brauchen; Ich muss nur in der Lage sein, es programmatisch zu starten.

War es hilfreich?

Lösung

Unter Umständen müssen Sie es über cmd laufen, zum Beispiel:

system("cmd /c C:[path to file]");

Andere Tipps

<?php
exec('c:\WINDOWS\system32\cmd.exe /c START C:\Program Files\VideoLAN\VLC\vlc.bat');
?>

Wenn Sie die exec() Funktion zu verwenden, ist es, als ob Sie einen cmd Terminal geöffnet haben und die Eingabe-Befehle direkt auf sie.
Benutzen Sie ähnlichen $str = exec('start /B Path\to\batch.bat');
Die /B bedeutet, dass die Fledermaus im Hintergrund ausgeführt werden, so dass der Rest des PHP wird auch weiterhin nach dieser Zeile ausgeführt wird, im Gegensatz zu $str = exec('start /B /C command', $result); wo command ausgeführt wird und dann result wird für eine spätere Verwendung gespeichert werden.

PS: Es ist für Windows und Linux funktioniert.
Weitere Details sind hier http://www.php.net/manual/en/function.exec .php :)

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

auf meiner Windows-Rechner 8 Maschine mit IIS 8 Ich kann die Batchdatei nur durch die Fledermaus Namen setzen und forgettig den Weg dorthin. Oder durch den Schläger in c setzen: \ windows \ system32 Sie nicht mich fragen, wie es funktioniert, aber es funktioniert. LOL

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

Dieser Code-Schnipsel ist aus dem Code zu arbeiten.

Sie können Bat-Datei nicht nur von Windows-GUI oder dem Task Scheduler auslösen, sondern direkt aus PHP-Skript, wenn Sie es brauchen. Aber in den meisten Fällen wird es haben Ausführung für 30-60 sec. abhängig von Ihrer PHP-Konfiguration. Wenn Job in BAT-Datei lang ist und Sie nicht möchten, dass Ihre PHP-Skripte einzufrieren, müssen Sie BAT Job als ein anderer Prozess mit php.exe blechen und nicht von Apache zuverlässig sein.

Dies läuft in Hintergrund Modus in Windows, gesehen als separate Prozesse cmd.exe und php.exe von Task-Manager nicht Ihren Apache PHP-Skripte zu stoppen. Die Nachrichten von Ihrem Skript erzeugt wird, kann wieder über Log-Dateien gespeichert und abgerufen werden.

In meinem Fall in file_scanner.php ich einige schweren Berechnungen in Schleife tue für großen Array von Dateien, die für ein paar Stunden mit PHP-Funktion sleep() dauern können nicht CPU zu überlasten.

Der Erfolg poiner Ergebnis aus der Datei $r, die Sie über Ajax abfragen können, wenn Sie Erfolg wissen wollen oder fauty starten. In meinem Fall schreibt file_scanner.php Protokolldatei mit Meldungen somefile.jpg - OK wich können Sie alle paar Sekunden mit AJAX UI laden Fortschritt zu zeigen.

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top