PHPから.batファイルをどのように実行しますか?
-
08-07-2019 - |
質問
PHPスクリプトから.batファイルを実行する方法を教えてもらえますか?
試しました:
exec("C:\[path to file]");
system("C:\[path to file]");
何も機能していません。 PHPのマニュアルを確認してグーグルで調べましたが、良い答えが見つかりません。誰が私が間違っているのか知っていますか?
Windows 2003 Serverを実行していますが、手動で.batファイルを正常に実行しましたが、必要なことを行います。プログラムで起動できるようにする必要があります。
解決
cmd
で実行する必要がある場合があります。例:
system("cmd /c C:[path to file]");
他のヒント
<?php
exec('c:\WINDOWS\system32\cmd.exe /c START C:\Program Files\VideoLAN\VLC\vlc.bat');
?>
exec()
関数を使用すると、 cmd
ターミナルが開いており、コマンドを直接入力しているように見えます。
次のような単一引用符を使用します $ str = exec( 'start / B Path \ to \ batch.bat');
/ B
は、バットがバックグラウンドで実行されることを意味するため、 php の残りは、< code> $ str = exec( 'start / B / C command'、$ result); command
が実行され、後で使用するために result
が保存されます。
PS: WindowsとLinuxの両方で機能します。
詳細はこちら http://www.php.net/manual/en/function.exec .php :)
<?php
pclose(popen("start /B test.bat", "r")); die();
?>
IIS 8を実行しているWindowsマシン8マシンで、コウモリの名前を付けてパスを忘れることでバッチファイルを実行できます。または、バットをc:\ windows \ system32に入れて それがどのように機能するかを私に聞かないでください。笑
$ test = shell_exec(&quot; C:\ windows \ system32 \ cmd.exe / c $ streamnumX.bat&quot;);
このスニペットは動作中のコードからのものです。
batファイルは、Windows GUIまたはタスクスケジューラからだけでなく、必要なときにPHPスクリプトから直接トリガーできます。ただし、ほとんどの場合、30〜60秒間実行されます。 PHPの設定によります。 BATファイル内のジョブが長く、PHPスクリプトをフリーズしたくない場合は、 php.exe
を使用してBATジョブを別のプロセスとしてフォークする必要があり、Apacheに依存しません。
これはWindowsのバックグラウンドモードで実行され、Apacheを停止しないタスクマネージャーからの個別のプロセス cmd.exe
および php.exe
として表示されます。 PHPスクリプト。スクリプトによって生成されたメッセージは保存され、ログファイルを介して取得されます。
file_scanner.php
の場合、PHP関数 sleep()
を使用して、数時間続く可能性のある大きなファイル配列のループで重い計算を行いますCPUをオーバーロードします。
成功ポイナーの結果はファイル $ r
から得られます。成功または失敗の始まりを知りたい場合は、ajax経由でクエリできます。私の場合、 file_scanner.php
はログファイルにメッセージ somefile.jpg-OK
を書き込みます。数秒ごとにUIにロードして進行状況を表示できます。
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