Dieser Ausschnitt stammt aus dem Arbeitscode.
Sie können die Bat-Datei nicht nur über die Windows-GUI oder den Taskplaner auslösen, sondern auch direkt aus dem PHP-Skript, wenn Sie es brauchen. In den meisten Fällen dauert die Ausführung jedoch 30-60 Sekunden, abhängig von Ihrer PHP-Konfiguration. Wenn der Job in der BAT-Datei lang ist und Sie Ihre PHP-Skripte nicht einfrieren wollen, müssen Sie den BAT-Job als einen anderen Prozess forken, indem Sie php.exe
und von Apache nicht verlässlich sein.
Dies läuft in Hintergrund Modus in Windows, die als separate Prozesse betrachtet werden cmd.exe
y php.exe
vom Task-Manager, der Ihre Apache-PHP-Skripte nicht anhält. Die von Ihrem Skript erzeugten Meldungen können gespeichert und über Protokolldateien wieder abgerufen werden.
In meinem Fall in file_scanner.php
Ich tue einige schwere Berechnungen in Schleife für große Array von Dateien, die für einige Stunden mit php-Funktion dauern kann sleep()
um die CPU nicht zu überlasten.
Das Ergebnis des Erfolgspointers aus der Datei $r
die Sie per Ajax abfragen können, wenn Sie den Erfolg oder Fehlstart wissen wollen. In meinem Fall file_scanner.php
schreibt Logdatei mit Meldungen somefile.jpg - OK
die Sie alle paar Sekunden mit AJAX in 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