min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

popen("recpt1...") が返すポインタ$handleを、$buffer = fgets($handle)して読んでバッファに入れてpid取得する

PHP

shell_exec()とか、exec()とか、ズルはしない。

ちゃんとpopen()したポインタをゴリゴリ読んでこそと思い。いろいろつまずく。

ーーー

まず、127行目のprint文が実行されずに困った。

120行目のif文で、ポインタ$handle0に値が入っていないとみた。

117行目のpopen()内部で、

 & を付けてrecpt1をバックグラウンド実行しているからか?

 それとも、標準出力を /dev/null に捨てているからか?

f:id:min117:20151103073340p:plain

試しに、118行目にprint文を入れて$handle0を覗いてみる。

f:id:min117:20151103073459p:plain

やはり、$handle0にリソースが返ってきていない。

ブラウザ出力結果が

 f:id:min117:20151103073801p:plain

てなっちゃう。

 

いや待てよ、そもそもポインタをprint文で表示しようとしてるのがアホなのか?

専用の関数があるのか?

いずれにしても、120行目のif文の中に入ってるかどうか調べないといけない。

 

if文直後の121行目にprint文を追加。

f:id:min117:20151103111154p:plain

さっそくブラウザから実行してみると

 f:id:min117:20151103111239p:plain

if($handle0)文は、開始してる。

$handle にポインタは返ってきているらしい。120行目のif文は原因じゃなかった。

 

てことは、原因は125行目のif文か。

preg_match()の正規表現の条件が違うらしい。

 

preg_match('/¥s*(¥d+)/', $buffer, $m)

$buffer から文字列を探す s*(¥d) をやった結果が$mに配列で入る(ハズ)。

中身を見てみる。

127行目にprint文を入れ、

128行目に var_dump($m); を入れて録画実行してみる。

 

現状、

 pidが 10323 (チューナー6)と

 pidが 29081 (チューナー7)の

の、2つのrecpt1プロセスが起動している。

f:id:min117:20151103120653p:plain

 

これにさらに録画実行する。チューナー2 を使う。

結果、pidは3つになるから、配列 $m[] にpidが3つ入ってくれば成功。

 

チューナ2 を指定して、録画formからsubmit実行。

 f:id:min117:20151103120941p:plain

結果。

 f:id:min117:20151103120219p:plain

 

あれ?127行目のprintの出力が無い。

やはり125行目のif文が成立していないのか?