• ベストアンサー

perlからphpを実行して結果を得る方法

perlのプログラムから同一サーバー内のphpを実行してその結果を取得したいのですが、うまくいきません。 print.phpというファイルの中身が <? echo "<div>1234567890</div>"; ?> だとして、これをブラウザで見た場合のソースは <div>1234567890</div> となるわけで、この1234567890をperlのプログラム内で表示するために main.cgiというプログラム内で $data = '/***/www/print.php'; open(FH,$data); @list = <FH>; foreach $data_line ( @list ) { if ($data_line =~/<div>/ ){ $data_line =~ s/<div>//i; $data_line =~ s/<\/div>//i; print = $data_line; } } close(FH); のような処理をすると echo "1234567890"; という実行前のphpの中身が表示されてしまいます。 表示したい結果はこの場合ブラウザでphpを実行した時のソースからdivタグをperl側で抜き取った 1234567890 なのですが、同じ事をperlの書き換えで実現する上手い方法があればご教授いただけますと助かります。

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

  • ベストアンサー
  • qtea
  • ベストアンサー率77% (38/49)
回答No.3

>$data = '/***/​www/print.php';​ >open(FH,$data); これだと、PHPの実行結果ではなくて、もろ、print.phpを開いています。 なので、www/print.phpをPHPで実行した処理結果で、置換処理等を行わないといけないです。 ○PHPをコマンドラインから実行 http://phpspot.net/php/man/php/features.commandline.html http://www.spencernetwork.org/memo/tips-6.php ○Perlのファイル操作http://www.ipc.hokusei.ac.jp/~z00104/perl/filehandle.html あたりを参考にして、 $PHP = '!/usr/bin/php'; #PHPのパス $PHP_FILE='/***/​www/print.php';​#実行するPHP open FH, "$PHP -q $PHP_FILE|"; @list = <FH>; close FH; ってな具合でいけるのではないかと、思います。 PHPはないので、未確認ですが。 あと検索は、「php コマンドライン」や「perl パイプ」あたりでしてみてはいかがでしょうか。

optional
質問者

お礼

四苦八苦し解決まで時間を要しましたが、教えていただいた資料が大変参考になりました。 大変ありがとうございました!!

その他の回答 (3)

  • qtea
  • ベストアンサー率77% (38/49)
回答No.4

NO3、ちょっと間違いがあります。 $PHP = '!/usr/bin/php'; #PHPのパス びっくりマークはいらないですね。 $PHP = '/usr/bin/php'; #PHPのパス

noname#39970
noname#39970
回答No.2

>perlに「php」という命令があるということですか? ・・・・・ こういう形と同じ事を言ってるんだけど・・・  system "ls -1" サーバ側にcli版phpが無いとできない  system "php print.php"

noname#39970
noname#39970
回答No.1

php print.php みたいな形で呼んで結果を取り込んだらだめなのかな?パイプとか。 systemだかexecだかで呼ぶんじゃなかったっけ?

optional
質問者

補足

>php print.php >みたいな形で呼んで結果を取り込んだらだめなのかな?パイプとか。 perlに「php」という命令があるということですか? 検索したのですが、ちょっとうまくひっかけることができなかったので もう少しつっこんだ感じでお伺いできますでしょうか。 要するにperlで結果を取り込んでその後divを置換で消すとか、単純な処理を考えています。 phpはあくまでサブルーチン的に別処理の結果を吐き出すためだけに使用しています。 >systemだかexecだかで呼ぶんじゃなかったっけ? これを使うとどういう形で返ってくるのか、自分の知識ではいまいち心元ないです。実行させるのはいいとして、結果の受け取りにまた手続きがいるというか、何か変数を用意すればそれに入ってくれるのかなど、です。 元のプログラムにもあるように1行ずつ変数に入れて、必要な部分だけ抜き取って加工してprintで表示させたい思惑です。

関連するQ&A