IISでPHPから外部アプリケーションを実行する

せっかくWindowsを使っているんだから、PHPからWindowsアプリと連携したい!という時の設定

コマンドの実行

PHPではexec()を使うことによって、コマンドの実行ができる。

の実行により、コマンドプロンプト(PowerShell)と同様の結果が$outputに出力される。

*結果はsjis-winなので、UTF-8で処理する場合は変換が必要

batの実行

PHPと同階層にecho.batがある場合、次のように書く。

$outputが結果、$return_varがステータス。
$return_varが0であれば正常実行。

batに引数を渡したい場合は次のように半角スペースを挟む

引数が複数の場合はさらに半角スペースを挟んで記述

引数に半角スペースを含みたい場合は”で囲う

exeの実行

PHPと同階層にsakasa.exeがある場合は次

サイト外の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があることを想定