Windows の php で コマンドの実行をバックグラウンド(非同期)で実施する
php で コマンドを実行する方法と、それをバックグラウンドで実行する方法について述べる。
php で コマンドなどを実施したい場合、まっさきに思いつくのがexecですね。
以下を実施するとカレントにa.txtが生成されます。
<?php
exec('type nul > a.txt');
?>
が、exec関数だとバックグラウンド実行にはできないんです。
Windowsでコマンドをバックグラウンド実行する場合、 start /b (Linuxでいう&)をつければよいのですが、exec関数内でstart /bをつけたところでバックグラウンド実行にはなりません。
具体的には時間のかかるtimeoutをやってみましょう。
<?php
exec('start /b timeout 10');
?>
exec関数の場合、start /b が有効にならないのです。
ではどうしたらよいでしょうか?同じようにコマンドを実施できる popenを使えばよいのです。
<?php
pclose(popen('start /b timeout 10', 'r'));
?>
のようにすると問題なくバックグラウンドで実施されました!
まぁ戻りを待ったりできないし、あんまり使いどころもないかもしれないですが。
以上!