プロが教えるわが家の防犯対策術!

バッチファイルを使って、サーバーにインストールを起動させようとしています。

が、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

お手数ですが、どなたかご教示下さい。

A 回答 (3件)

>権限の問題なのでしょうか?


権限の問題じゃないのかな
dirはcmd.exeが持ってるんだっけ?(ちょっと良く覚えてない)
実行しようとしているコマンド(?)がphp側からの起動(webアクセスだからeveryoneあたり?)に対して拒否されてるだけなんじゃないのかな
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

一つ下の階層からディレクトリに権限をつけてみました。
Evryone → フルコントロール
exec( 'xxx.txt' );
を実行しましたが動きませんでした。

匿名のアクセスに使用する IUSR アカウントが、既定で Guests グループのメンバに設定されているらしいので、
Guests → フルコントロール
に。

しかし、開くことはできませんでした。

権限の設定方法が違うのでしょうか。。。。

お礼日時:2008/03/26 20:59

QNo.3895760 から引用


> バッチファイルを開こうとすると固まってしまいます。
> setup.exe

この「setup.exe」はウィンドウを持つアプリケーション(GUI)なのでしょうか?

> Windowsサーバー2003 R2
> Apache2.2

ANo.1 の補足から引用
> 画面が固まります。

実行環境からすると、この"固まります"と仰っているのはブラウザの画面でしょうか?

※ 以下は「setup.exe」がウィンドウを持つ GUI アプリケーションでありブラウザで開いていると仮定して
  記述していますので、異なるのであればご容赦下さい。

そうであるとすると、基本的に標準出力にデータを吐き出して即時終了するようなアプリケーションしか
呼び出すべきではないと思われます。

言い替えるとウィンドウを持つプログラムを実行すればプロセスだけが残り、最悪はタスクマネージャからも
終了できないような状態になると思われます。

Windows Server 2003 R2 にローカルログインされてタスクマネージャなどでプロセスが残っていないか
確認されてはいかがでしょうか?

# ただし GUI でもインタラクティブな操作を必要とせずに、処理が即時終了するようなものであれば、
# 動作(おそらくブラウザには何の表示も出ませんが)するのかもしれません。

この回答への補足

ご回答ありがとうございます。

>画面が固まります。
これは、setup.exeを起動させる為にPHPを実行しているブラウザが固まるということです。

setup.phpは、GUIアプリケーションではなく、
データの出力が終了したら即事終了するアプリケーションです。

実際、PHPで呼び出しはしていてもサーバー側では何も動いていないので、プロセス自体発生していない状況です。

補足日時:2008/03/27 09:24
    • good
    • 0
この回答へのお礼

やはり権限の問題だったようです。

IISのインストール、インターネットゲストアカウント(IUSR)への権限付与によって動くようになりました。

ご回答頂いた皆様、どうもありがとうございました。

お礼日時:2008/03/27 14:20

exec関数は危険な関数ですから、デフォルトで実行禁止になっていませんか?


具体的には、php.iniファイルに次のような定義がないか確認することです。


disable_functions = "exec, shell_exec, suexec"

これはexec, shell_exec, suexecを実行禁止にした設定例です。

>バッチファイルを開こうとすると固まってしまいます。
この際に出るログを見れば、もっとよく分かると思います。

また、いきなり自作のバッチを実行するのではなく、もっと簡単なコマンド(例えばdir でファイルリストを取得するとか)を使った例を試してはいかがでしょう。
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。

pup.iniを確認したところ、「disable_functions」は何も設定されていませんでした。

dirにするとファイルリストが返ってきますので動いていないわけではないようです。

例えば、xxx.phpのファイルと同じディレクトリにxxx.txtをおいて

exec('xxx.txt');

とするとやはり画面が固まります。
固まって、そのままなので、ログに反映もされません。

exec('cmd.exe /c start');
この場合、コマンドの起動自体していないようです。

権限の問題なのでしょうか?
外部からのアクセスが許可されていないとか。。。

ちなみに
管理>サービス>Apache2.2 では、「デスクトップとの対話サービスに許可」にチェックをいれています。

お手数ですが宜しくお願いします。

お礼日時:2008/03/26 13:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!