人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

[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

●質問者: router
●カテゴリ:コンピュータ
✍キーワード:Cui exe ON PHP WIN
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● tenshiks
●5ポイント

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のメイン処理がロードされていると言う事だと思われます。


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

◎質問者からの返答

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

2個目のURLには

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

とあります。

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

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

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

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

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


2 ● eguchi2668
●5ポイント

http://bio-math10.biology.kyushu-u.ac.jp/~tohya/tips/job.html

Monkey's tips on UNIX -jobs-

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

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

◎質問者からの返答

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

そのようですね。

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

「exec(”example.exe”);」

こういう形です。


3 ● i_kumagoro
●70ポイント

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

Meadow - Trac

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

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

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

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


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

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

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

ことは可能です。


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


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

◎質問者からの返答

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ