せっかくWindowsを使っているんだから、PHPからWindowsアプリと連携したい!という時の設定
コマンドの実行
PHPではexec()を使うことによって、コマンドの実行ができる。
1 |
exec('whoami', $output); |
や
1 |
exec('ipconfig', $output); |
の実行により、コマンドプロンプト(PowerShell)と同様の結果が$outputに出力される。
*結果はsjis-winなので、UTF-8で処理する場合は変換が必要
batの実行
PHPと同階層にecho.batがある場合、次のように書く。
1 |
exec('echo.bat', $output, $return_var); |
$outputが結果、$return_varがステータス。
$return_varが0であれば正常実行。
batに引数を渡したい場合は次のように半角スペースを挟む
1 |
exec('echo.bat hoge', $output, $return_var); |
引数が複数の場合はさらに半角スペースを挟んで記述
1 |
exec('echo.bat hoge foo', $output, $return_var); |
引数に半角スペースを含みたい場合は”で囲う
1 |
exec('echo.bat "Mizutama Inc."', $output, $return_var); |
exeの実行
PHPと同階層にsakasa.exeがある場合は次
1 |
exec('sakasa.exe', $output, $return_var); |
サイト外のbat,exeの実行
サイト外にbat,exeがある場合はフルパスで記述する。
batからexe実行も可能。
サイト外のbat,exeの注意点
Windows7~10を6台での動作確認を行ったが、Windows7(IIS 7.5)では、各ディレクトリのセキュリティにユーザーの追加が必要な場合があるが、環境により全て必要だったり、一部必要だったり。IISやPHPインストール時の違いかもしれないが、詳細未検証。
- bat,exeを配置したディレクトリにIUSRを加える。
- exeからサイト上のファイルを書き換えたい場合は、サイトのディレクトリにIIS_IUSRSを加える。
ソースファイル
https://github.com/umhr/iis_exetest
*一部wwwrootと同階層に、ffmpeg-20171016-7480f23-win64-staticがあることを想定