• ベストアンサー

gnuplotの実行

PHP4でGNUPLOTを起動して 実行させたいんですが、うまくできません。 今、 system("/usr/local/bin/gnuplot"); system("set term gif"); system("set output 'test.gif'"); system("plot x"); という簡単なプログラムでテストしてみたのですが 反応なしで困っています...。 そもそもこの記述がおかしいのでしょうか? それとも他に関数や方法があるのでしょうか? 因みにpassthruやexec関数などでも試してみましたが やはりダメでした。 ご存知の方、知恵を下さい。 お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • selenity
  • ベストアンサー率41% (324/772)
回答No.3

> popenはどのように使えばいいのですか? > $fp = popen(/usr/local/bin/gnuplot, "r");←? 今回はGNUPLOTへパラメータを渡してあげるので、 $fp = popen(/usr/local/bin/gnuplot, "w"); と書きます。 んで、$fpをオープンした後、 fwrite($fp,"GNUPLOTのコマンド\n"); fwrite($fp,"GNUPLOTのコマンド\n"); fwrite($fp,"GNUPLOTのコマンド\n"); の様に、コマンドを実行してゆきます。 コマンド実行後は、 pclose($fp); で閉じて完了です。 PLOT描画にある程度時間がかかるのであれば、 fwrite()とfwrite()の間にsleep()を入れてあげましょう。

bridge
質問者

お礼

度々ありがとうございました。 おかげさまでできましたよ!! tomomo0325さんの方法でもできたんですがselenityさんの方が直接コマンドを叩く?感じのロジックでわかりやすいのでこちらを使わせていただきます。 tomomo0325さんごめんなさい。でもありがとうございました。 お二方、とても参考になりました。 ご協力ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.2

PHP4.0.6で動作確認しました。 PHP3でも動作すると思います。 gnuplotは良く知らないのですが、 「set term gif」が使えなかったので 「set terminal png」を使用しました。 selenityさんが言われるように、 popen()のほうがスマートかもしれませんが、 デバッグのことを考えてファイルに書き込んで パイプしてみました。 <HTML lang="ja"><HEAD> <META http-equiv="content-type" content="text/html; charset=euc-jp"> </HEAD><BODY> <?php $cmdfile = "/tmp/gnuplot.txt"; $outfile = "/tmp/test.png"; $fp = fopen($cmdfile, "w"); fwrite($fp, "set terminal png\n"); fwrite($fp, "set output \"$outfile\"\n"); fwrite($fp, "plot cos(x)\n"); fclose($fp); $syscmd ="/bin/cat ".$cmdfile." | /usr/bin/gnuplot"; system($syscmd, &$rtn); if ($rtn == 0){ echo "Output success:".$outfile."\n"; } else { echo "NG\n"; } ?> </BODY></HTML>

bridge
質問者

お礼

できました!ありがとうございましたm(_ _)m

すると、全ての回答が全文表示されます。
  • selenity
  • ベストアンサー率41% (324/772)
回答No.1

・set term gif ・set output 'test.gif' ・plot x はGNUPLOTへの命令なので、system()では無理だと思いますよ。 popen()を使えば出来ませんか?

bridge
質問者

補足

ご回答ありがとうございます。 試してみましたが popenはどのように使えばいいのですか? $fp = popen(/usr/local/bin/gnuplot, "r");←? でGNUPLOTをオープンしたら、そのあと GNUPLOTへのコマンドはどのように発行すればいいのでしょう? いろいろ試してみてたいので自信なくても結構です。 これがきっかけになればいいのですから...。 例えば「こういう風にプログラムしてみては?」みたいな 詳細なアドバイスがあると非常に助かります。 大変恐縮ではありますがもう一声下さい。 お願いします。

すると、全ての回答が全文表示されます。

関連するQ&A