web-dev-qa-db-ja.com

PHPから.batファイルを実行するにはどうすればよいですか?

PHPスクリプトから.batファイルを実行する方法を教えてもらえますか?

私が試してみました:

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

何も機能していません。 PHPマニュアルを確認し、グーグルで検索しましたが、適切な答えが見つかりません。

Windows 2003 Serverを実行していますが、手動で.batファイルを正常に実行しましたが、必要な処理を実行します。プログラムで起動できる必要があります。

41
undefined

cmd経由で実行する必要があるかもしれません。例えば:

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

exec()関数を使用すると、cmd端子を開いて、それに直接コマンドを入力しているように見えます。

このような$str = exec('start /B Path\to\batch.bat');のような単一引用符を使用します
_/B_は、バットがバックグラウンドで実行されることを意味するため、残りの php commandが実行され、後で使用するためにresultが保存される$str = exec('start /B /C command', $result);とは対照的に、その行の実行後も継続します。

PS: WindowsとLinuxの両方で機能します。
詳細はこちら http://www.php.net/manual/en/function.exec.php :)

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

windowsマシン8でIIS 8それがどのように機能するかを私に聞かないでください。

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

1
calmchess

このスニペットは作業コードからのものです

Batファイルは、Windows GUIまたはタスクスケジューラからだけでなく、必要なときにPHPスクリプトから直接トリガーできます。ただし、ほとんどの場合、30〜60秒実行されます。 PHP configuration。BATファイル内のジョブが長く、PHPスクリプトを凍結したくない場合、別のプロセスとしてBATジョブをforkする必要があります。 _php.exe_であり、Apacheに依存しない。

これは バックグラウンド Windowsのモードは、Apache PHPスクリプトを停止しないタスクマネージャーからの個別のプロセス_cmd.exe_および_php.exe_として表示されます。ログファイル経由。

_file_scanner.php_の私のケースでは、CPU関数を過負荷にしないために、PHP関数sleep()を使用して数時間続くファイルの大きな配列に対して、ループでいくつかの重い計算を行います。

成功またはファウティースタートを知りたい場合は、ajaxを介してクエリできるファイル_$r_から成功ポイナー結果が得られます。私の場合、_file_scanner.php_はログファイルにメッセージ_somefile.jpg - OK_を書き込みます。AJAXを使用して進行状況を表示するために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
_
0
Alex Khimich