Windows サーバーで exec を動作させようとすると、「unable to fork」というエラー メッセージが表示されます。問題を少し調べた後、推奨される修正は、IUSR アカウントに c:\Windows\System32\cmd.exe に対する READ および EXECUTE 権限を付与することです。
しかし、それは重大なセキュリティ ホールですよね? 安全ですか?[phpから]サーバーにあるexeを実行する別の方法はありますか?
Windows PHP がこれを認識すると、cmd.exe を実行する必要があります。
exec("foo -bar -baz");
これは次のように呼ばれます。
cmd /c foo -bar -baz
ユーザーにパラメーターを入力させる場合、これはセキュリティ ホールにすぎません。IE、これを行うべきではありません:
// DO NOT DO THIS!
exec("foo -bar=" . $_GET['bar']);
代わりに、escapeshellargでパラメーターをサニタイズする必要があります。
// This is okay. (Be sure foo.exe can handle unexpected input!)
exec("foo -bar=" . escapeshellarg($_GET['bar']));
Windows でプロセスを作成すると、Unix クラスのオペレーティング システムよりも多くのオーバーヘッドが発生することに注意してください。多数のユーザーがいる場合、繰り返し呼び出すとexec()
、サーバーが停止する可能性があります。サーバーに大きな負荷がかかることが予想される場合は、ワーカー プロセスをWindows サービスとして継続的に実行することを検討してください。