[PHP][Windows]PHPから「exec()」や「system()」でWin上の外部プログラムを動かそうとしています。

今回動かすプログラムは、Win上ではコマンドプロンプトで操作するCUIのプログラムです。
(exeをダブルクリックすると、黒い窓が一瞬でて消えるやつです。)

http://ns1.php.gr.jp/pipermail/php-users/2002-July/009022.html
この辺を見ると、Win上の外部プログラムを呼び出す際、バックグラウンドでは動作しないとあります。
実際に「exec()」で外部プログラムを起動させると、タスクマネージャに「外部プログラム」と「CMD.exe」が表示されます。

まず、バックグラウンドで実行するというのは、どのような動作のことなのでしょうか?
そして、私のところでは、タスクマネージャに「外部プログラム」と「CMD.exe」が表示されている間、いつもの黒い窓も何も表示されません。
これはバックグラウンドで動作しているということなのでしょうか?
(できれば、表示させる方法を知りたいです。)

外部プログラムの処理は割りと重たいもので、数十秒かかります。
見逃しているということはないと思います。
PHP5 on Win2k Server

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/01/11 00:34:49
  • 終了:--

回答(3件)

id:tenshiks No.1

tenshiks回答回数52ベストアンサー獲得回数12006/01/11 03:47:17

ポイント5pt

http://www.stackasterisk.jp/tech/program/perl04_02.jsp

Perl��4���FPerlTips(�o�b�N�O���E���h�ŏ��������s)

Perlでのバックグラウンド動作に関する解説です。

http://www.stackasterisk.jp/tech/php/php02_02.jsp

PHP��2���FPHP����(�O���v���O�����̎��s/�o�b�N�O���E���h�ł̎��s)

上記を踏まえてphpにはfork関数が無いため、それを自作する必要があると言う事ですね。


バックグラウンド動作というのは外部プログラムの終了プロセスを待たずにphpのメイン処理がロードされていると言う事だと思われます。


表示させるというのは、その外部プログラムの問題かと思いますので、そちらが通常起動で表示する状態であれば表示されるかと思います。

id:router

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

2個目のURLには

>最後の & は、バックグラウンドで実行するという意味です。このあたりの詳しいことは UNIX のシェルの本をみれば載っています。

とあります。

そこで自分でもさらに調べてみたところ

http://pine.zero.ad.jp/~zbm97210/unix/job.html#l1

という解説がありました。

バックグラウンドの意味はこれで分かりましたが、これはつまり、私の環境では「CMD.exe」がバックグラウンドで動作していることになってしまうような気がします。

「CMD.exe」が黒い窓を開かずに動作することがあるのか、また質問文の環境で窓を開いて動作させる方法、の方へのご回答を、引き続きお待ちしています。

2006/01/11 12:05:09
id:eguchi2668 No.2

eguchi2668回答回数22ベストアンサー獲得回数02006/01/11 11:41:08

ポイント5pt

リンク先の文章の解説をするならば、

そこで言っている「&でバックグラウンドを実行する」とは、Unixの機能のことを指しています。Unixでは、通常コマンドを実行すると、そのコマンドの実行中そのコンソールは使用できません。コマンド実行時に&を後ろにつけると、コマンドを実行させながらコンソール上で他のコマンドを別に実行させるkとが可能になります。これがUnixでのバックグラウンドの動作です。Windowsにはこの機能がないので、後に&をつけても無視されます、ということです。ですので、貴方のプログラムでは処理がバックグラウンドで実行されているわけではありません。

id:router

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

そのようですね。

書き忘れてしまいましたが「&」はつけていません。

「exec(”example.exe”);」

こういう形です。

2006/01/19 18:05:02
id:i_kumagoro No.3

i_kumagoro回答回数170ベストアンサー獲得回数582006/01/13 12:24:55

ポイント70pt

cmd.exe がコンソール画面を出さずに動作する事もあります。

例えばウェブサーバーを立ち上げていた時に、そこから起動された

プログラムが毎回コンソール画面を出しては消していたら

そのコンピュータで作業する人はまともにコンピュータが操作できなくなります。


それから、画面を表示させる方法ですが、

http://www.meadowy.org/meadow/

のMeadowの配布物に含まれるfiber.exeの様なものを使えば画面を表示する

ことは可能です。


exec(”fiber.exe example.exe”);


ただし、その場合は、出力内容をphp側には戻せません。

id:router

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

fiber.exeはPHP側に出力できないのが残念ですね。

でもとりあえずそういうものだということが分かりました。

2006/01/19 18:06:41

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません