バッチファイルを使って、サーバーにインストールを起動させようとしています。
が、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
お手数ですが、どなたかご教示下さい。
No.2ベストアンサー
- 回答日時:
>権限の問題なのでしょうか?
権限の問題じゃないのかな
dirはcmd.exeが持ってるんだっけ?(ちょっと良く覚えてない)
実行しようとしているコマンド(?)がphp側からの起動(webアクセスだからeveryoneあたり?)に対して拒否されてるだけなんじゃないのかな
回答ありがとうございます。
一つ下の階層からディレクトリに権限をつけてみました。
Evryone → フルコントロール
exec( 'xxx.txt' );
を実行しましたが動きませんでした。
匿名のアクセスに使用する IUSR アカウントが、既定で Guests グループのメンバに設定されているらしいので、
Guests → フルコントロール
に。
しかし、開くことはできませんでした。
権限の設定方法が違うのでしょうか。。。。
No.3
- 回答日時:
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で呼び出しはしていてもサーバー側では何も動いていないので、プロセス自体発生していない状況です。
やはり権限の問題だったようです。
IISのインストール、インターネットゲストアカウント(IUSR)への権限付与によって動くようになりました。
ご回答頂いた皆様、どうもありがとうございました。
No.1
- 回答日時:
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 では、「デスクトップとの対話サービスに許可」にチェックをいれています。
お手数ですが宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 10 USBにwindows10をいれて起動する方法 5 2022/04/14 14:29
- サーバー Laravelをレンタルサーバーにインストールするにはどうすればいいですか? 2 2022/06/29 10:17
- デスクトップパソコン Dell Inspiron 3250でRealtekのドラーバーでのLine outから出力しない 1 2022/07/10 19:15
- その他(パソコン・周辺機器) チャレンジタッチ3 改造 アプリインストールできない 1 2022/07/01 14:43
- その他(プログラミング・Web制作) フォルダ内の特定 拡張子のファイルを一括実行するBat ファイルについて 4 2022/04/17 09:51
- ネットワーク 通信量を見たい 3 2023/03/01 07:47
- その他(パソコン・スマホ・電化製品) CMD等でPC操作(excel開く等)を自動化させたい 1 2023/03/15 09:53
- システム Windowsタブレットの制限? 1 2023/02/18 23:15
- 日本株 SBI証券HYPER SBI 2のエラー 1 2023/01/31 13:38
- Excel(エクセル) SUMIFSと日付変換 10 2023/04/16 15:38
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MySQLでのdeadlockをPHPで検出...
-
PHPでサーバーにインストールさ...
-
PHPからCプログラムを実行して...
-
【PHP】命令は記述順に処理...
-
PHPで外部プログラムのバックグ...
-
phpからエクセルのマクロを実行...
-
copy() で属性保存
-
JSのWINOW.CONFI...
-
シェルスクリプトをPHPで動かそ...
-
query、prepare、executeの違い
-
PHPの自動実行
-
PHPファイルをCron設定からのみ...
-
[cakePHP]外部ファイルの実行方法
-
実行ユーザー切り替え方法
-
PHPからlhaコマンドを使いたい
-
PHPからバッチファイルの実行
-
onedrive にexcelファイルをア...
-
.phpと.incファイルの違いはな...
-
フォントの色を変えるには?
-
CFileDialogの最初のディレクト...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
mysql複数レコードをまとめて削...
-
php実行中に実行中のphpファイ...
-
phpからエクセルのマクロを実行...
-
ヒアドキュメントの中で演算子...
-
PHPからバッチファイルの実行
-
PHPのコマンドをnobodyオーナで...
-
copy() で属性保存
-
$argv[1]) && $argv[1]・同じ
-
PHPで外部プログラムのバックグ...
-
Prompt入力値をphp変数として取...
-
PHPでサーバーにインストールさ...
-
PHPで、C#のプログラムを実行す...
-
query、prepare、executeの違い
-
require_onceが動いていない
-
現在、レンタルサーバ(コアサー...
-
IIS + PHP からのWindowsコマン...
-
phpスクリプトのみで定期実行
-
【PHP】命令は記述順に処理...
-
PHP(Windows)でコマンド実行
-
PHPでコマンドプロンプトを実行...
おすすめ情報