- PR -

【php】exec関数について教えてください

1
投稿者投稿内容
kuro
会議室デビュー日: 2004/12/12
投稿数: 3
投稿日時: 2004-12-12 17:23
はじめまして。
kuroです。

今、作っているプログラムで解決方法が分からなくて大変困っています。
どなたか教えていただけないでしょうか。
よろしくお願いします。

環境:
PHP: , ウェブサーバ: アパッチ, OS:RedHut Linux
問題の現象:
phpからexec関数を使い、Cで作成したプログラムを起動していました。
一度動くことを確認(呼び出すプログラムが出す標準出力の文字列を取得し、表示で来た)した状態で、一時期、ほかの事に手をつけたので、そのままにしてありました。
半月ぶりぐらいに実行すると、以前のように文字列を拾ってくれなくなっていました。
呼び出しているのは内部でシェルを呼び出す、Cプログラムです。

調べたこと:
標準出力の文字列が拾えなくなっているのか、実行されていないのかを切り分けるため、Cプログラムを修正してみました。
実行すると空のテキストファイルを作成するようにしてみて、動かしてみました。
コマンドラインから実行すると作られるが、exec関数を使用すると、ファイルが作られないため、実行できてないのではと思っています。
放置していた半月の間にソースが変わったわけではありません。
また、環境は他の人も使用しているのですが、なにか設定を変えたかどうか聞いてみたところ、多分変えてないとの事でした。
ただ、これは、複数の人が使用しているため、環境設定がかわっている可能性はまったくないとは言い切れません。

原因の予測もつきませんし、どう対処すれば直るかも予測がつきません。
どなたか教えてください。
お願いします m(_ _)m。
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2004-12-13 11:15
exec()は指定された commandを実行しますが、一切の出力はありま せん。ただ単に、コマンド結果の最後の行を返すだけです。コマンドを実行し、一切干渉を受けずに直接コマンドから
全てのデータを受けとる必要が あるならば、PassThru() 関数を使ってください。
kuro
会議室デビュー日: 2004/12/12
投稿数: 3
投稿日時: 2004-12-13 11:30
返信ありがとうございます!
そしてまた教えていただきたいのですが。
何度も申し訳ありませんが、教えていただければと思います。

PassThru() 関数の説明を見たところ、戻り値を拾うとなっていたのですが、
それ以外の情報も拾えるのでしょうか?

現在拾おうとしているメッセージというのは標準出力に出力されるメッセージなのです。
戻り値でエラーを返してくれていれば、戻り値でエラーかどうか判定できて楽なのですが、現在起動させようとしてるシェルは戻り値をかえしてくれず、標準出力にエラーメッセージを表示させるのみなのです。。。
これまで、このシェルはコマンドラインから単独で起動するようにしていたためだと思いますが。
このシェルは他の人が作ったもので、シェルの処理内容を変更せずに何とか標準出力に出力されたエラー表示を拾い、そのメッセージを画面に表示させたいのです。

PassThru() 関数を用いて拾えるものなのでしょうか?

php初心者で、ポケットリファレンスとWebでの検索でいろいろ調べているのですが、いい方法がわからず困っております。
最初の投稿は私の説明が不足しており、まことに申し訳ありません。

すみませんが、いい方法があれば教えていただけないでしょうか。
どうぞよろしくお願いいたします。
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2004-12-13 19:28
だめなら、標準出力を

CコンパイルしたELFバイナリ > ファイル

でリダイレクトして、標準出力を一端ファイルに落とし、PHPからそのファイルを
オープンして内容をバッファに取り込み、PHP変数に代入。
kuro
会議室デビュー日: 2004/12/12
投稿数: 3
投稿日時: 2004-12-14 00:01
ありがとうございます!
やってみたら、無事出力することができました。

助かりましたm(_ _)m
常連さん
会議室デビュー日: 2004/04/06
投稿数: 38
お住まい・勤務地: 大阪
投稿日時: 2004-12-14 09:13
国と申します。

もう既に解決されている様ですが、

$a=`ls -a`;



exec("ls -a",$a);
foreach($a as $tmp)$b.="$tmp\n";

で標準出力を拾えませんか。
1

スキルアップ/キャリアアップ(JOB@IT)