- ベストアンサー
PHPでサーバーにインストールされたアプリケーションを起動させたい
バッチファイルを使って、サーバーにインストールを起動させようとしています。 が、PHPのexec関数が動きません。 バッチファイルを開こうとすると固まってしまいます。 xxx.bat ---------------------- cd C:\Program Files\xxx setup.exe ---------------------- xxx.php ------------------------------ $cmd = "cmd.exe /c start xxx.bat"; exec( $cmd ); ------------------------------ Windowsサーバー2003 R2 Apache2.2 お手数ですが、どなたかご教示下さい。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>権限の問題なのでしょうか? 権限の問題じゃないのかな dirはcmd.exeが持ってるんだっけ?(ちょっと良く覚えてない) 実行しようとしているコマンド(?)がphp側からの起動(webアクセスだからeveryoneあたり?)に対して拒否されてるだけなんじゃないのかな
その他の回答 (2)
- x415f484f
- ベストアンサー率71% (57/80)
QNo.3895760 から引用 > バッチファイルを開こうとすると固まってしまいます。 > setup.exe この「setup.exe」はウィンドウを持つアプリケーション(GUI)なのでしょうか? > Windowsサーバー2003 R2 > Apache2.2 ANo.1 の補足から引用 > 画面が固まります。 実行環境からすると、この"固まります"と仰っているのはブラウザの画面でしょうか? ※ 以下は「setup.exe」がウィンドウを持つ GUI アプリケーションでありブラウザで開いていると仮定して 記述していますので、異なるのであればご容赦下さい。 そうであるとすると、基本的に標準出力にデータを吐き出して即時終了するようなアプリケーションしか 呼び出すべきではないと思われます。 言い替えるとウィンドウを持つプログラムを実行すればプロセスだけが残り、最悪はタスクマネージャからも 終了できないような状態になると思われます。 Windows Server 2003 R2 にローカルログインされてタスクマネージャなどでプロセスが残っていないか 確認されてはいかがでしょうか? # ただし GUI でもインタラクティブな操作を必要とせずに、処理が即時終了するようなものであれば、 # 動作(おそらくブラウザには何の表示も出ませんが)するのかもしれません。
お礼
やはり権限の問題だったようです。 IISのインストール、インターネットゲストアカウント(IUSR)への権限付与によって動くようになりました。 ご回答頂いた皆様、どうもありがとうございました。
補足
ご回答ありがとうございます。 >画面が固まります。 これは、setup.exeを起動させる為にPHPを実行しているブラウザが固まるということです。 setup.phpは、GUIアプリケーションではなく、 データの出力が終了したら即事終了するアプリケーションです。 実際、PHPで呼び出しはしていてもサーバー側では何も動いていないので、プロセス自体発生していない状況です。
- vaio09
- ベストアンサー率37% (756/2018)
exec関数は危険な関数ですから、デフォルトで実行禁止になっていませんか? 具体的には、php.iniファイルに次のような定義がないか確認することです。 例 disable_functions = "exec, shell_exec, suexec" これはexec, shell_exec, suexecを実行禁止にした設定例です。 >バッチファイルを開こうとすると固まってしまいます。 この際に出るログを見れば、もっとよく分かると思います。 また、いきなり自作のバッチを実行するのではなく、もっと簡単なコマンド(例えばdir でファイルリストを取得するとか)を使った例を試してはいかがでしょう。
お礼
早速の回答ありがとうございます。 pup.iniを確認したところ、「disable_functions」は何も設定されていませんでした。 dirにするとファイルリストが返ってきますので動いていないわけではないようです。 例えば、xxx.phpのファイルと同じディレクトリにxxx.txtをおいて exec('xxx.txt'); とするとやはり画面が固まります。 固まって、そのままなので、ログに反映もされません。 exec('cmd.exe /c start'); この場合、コマンドの起動自体していないようです。 権限の問題なのでしょうか? 外部からのアクセスが許可されていないとか。。。 ちなみに 管理>サービス>Apache2.2 では、「デスクトップとの対話サービスに許可」にチェックをいれています。 お手数ですが宜しくお願いします。
お礼
回答ありがとうございます。 一つ下の階層からディレクトリに権限をつけてみました。 Evryone → フルコントロール exec( 'xxx.txt' ); を実行しましたが動きませんでした。 匿名のアクセスに使用する IUSR アカウントが、既定で Guests グループのメンバに設定されているらしいので、 Guests → フルコントロール に。 しかし、開くことはできませんでした。 権限の設定方法が違うのでしょうか。。。。