• ベストアンサー

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の書き換えで実現する上手い方法があればご教授いただけますと助かります。

  • CGI
  • 回答数4
  • ありがとう数2

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

  • ベストアンサー
  • 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

  • PHPからPerlにデータを渡して結果を受け取りたい

    今、PHPでプログラムを作っています。 そのプログラムからPerlで作られたプログラムにデータを渡して結果を受け取りたいと思います。 PHPからPerlのプログラムを呼び出してデータの受け渡しをすることは出来ますでしょうか。 出来るとすればどうすれば良いでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • Perl内でPHPの出力結果を表示したい

    Perl製のCGI内で、PHP製のランダムバナー表示CGIを呼ぼうとしたのですが、下記のようなエラーが出てしまいました。 いろいろ試行錯誤したのですが、お手上げです。 どのように修正したらよいでしょうか? なお、ランダムバナー表示CGI 単体だけを実行したときは、正常に表示されています。 [index.cgi]  #!/usr/local/bin/perl  print "Content-type: text/html\n\n";  print "<HTML>\n<BODY>\n\n";  $ImgFileName="./ad.php";  open(IN, "$ImgFileName |");  while (<IN>) {    $str=$str.$_;  }  close(IN);  print $str; [ad.php]  <?php  $_1 = ('<img src="http://example.jp/a.gif">');  $_2 = ('<img src="http://example.jp/b.gif">');  $img_arry = array("$_1","$_2");  srand((double)microtime()*1000000);  $num =array_rand($img_arry);  $image = $img_arry[$num];  echo "$image";  ?> [表示された内容] ./ad.php: ?php: No such file or directory ./ad.php: line 2: syntax error near unexpected token `('' ./ad.php: line 2: `$_1 = ('【a.gifの画像】);'

  • perl が 実行できない

    perl 初心者です。 apache を起動させ(起動画面は表示)、perl のファイルを IE で表示させようとして、print文を実行しても、print文がそのまま表示されるだけになっています。 perl のパスは、#! d:/perl/bin/perl です。 (コマンドラインから実行すると実行できるので、インストールは正常です。) (XP以前だったと思いますが、そのときは IEで、長文のプログラムが起動できていましたが。)

  • PHPからCプログラムを実行して実行結果をHTML上に表示

    PHP初心者です。PHPからCプログラムを実行して実行結果をHTML上に表示する方法が分からなく困っています。 Cプログラムの中身は、 #include <stdio.h> int main(){ printf("Hello."); } です。 phpの中身は、 <HTML> <HEAD><TITLE>Cプログラム呼び出し</TITLE></HEAD> <BODY> <?php $cmd = "test.exe"; $a = exec($cmd); echo $a; ?> </BODY> </HTML> としており、調べてみるとexec()関数で外部プログラムを実行すると書いてあったのでこのように作成しました。

    • ベストアンサー
    • PHP
  • Perl から csh 実行

    やまとです。 いつもありがとうございます。 Perl + csh を同時(?)に実行する方法を教えてください。 OSはSunです。 具体的にどのような処理を行いたいか簡単に説明しますと。 1.Perlでcshを実行(system関数?)し、cshで環境変数をセット(source)する。 2.cshで環境変数をセットしたら、ファイルを出力する処理が行われます。 3.Perlでcshによって出力されたファイルの内容を画面に表示します。 以下ソースを掲載します。(抜粋して) ================================================== = Perl ( test_perl.pl ) $data = "ABC"; $ret = system(`test_csh.sh $data`); ・ ・ ファイル(test.log)を開き、読込、画面に表示します(まだ作成してません。) ================================================== = Csh ( test_csh.sh ) source test_source.sh echo $1 > test.log ================================================== = test_source.sh setenv CLASSPATH .:/aaa・・・・・・ ↑ PATHの設定を行ってます。 ================================================== 画面に、「ABC」と出力させたいのです。 Perlからcshが実行されていないように思えるのですが、 Perlのsystem関数の使い方が誤っているのでしょうか? それとも、ClassPath等の設定をしなければならないのでしょうか? ちなみにコマンドから、 # test_csh.sh ABC と実行しますと、ファイルが出力され、かつ、sourceも実行されています。 Perlから実行する方法を教えてください。 説明が不十分であれば、補足いたしますのでご指摘ください。 宜しくお願いします。

    • ベストアンサー
    • Perl
  • Perlを実行する方法

    Perlを実行するために <?php $ret = exec('/usr/bin/php /usr/local/apache/public_html1/testdir/a.cgi'); print $ret; ?> のように書きましたが、a.cgiは実行されないし$retは空白でした。 execでなくてもよいのですが、普通はPHPの実行中に、ある処理をさせるa.cgiを実行させるにはどうしているんでしょうか? a.cgiの処理が終わるまでphpのprint $ret;のステートメントの実行は待ち状態で、a.cgiの処理結果がTRUEなのかFALSEなのかを得られればさらによいです。

    • 締切済み
    • PHP
  • [AS3]phpやPerl等から送り返された情報のFlashでの取得

    http://www.at-sonic.com/blog/archives/2008/02/as3php.php のような感じのプログラムを作っています。 このPHPのソース中、データをFlashへ送り返す部分で、 echo "comp=" . $comptxt; と、compにcomptxtを代入する形でFlashへ渡しています。PHP等でPrintした場合などは、FlashへHTMLのテキストデータをブラウザでなくFlashへ返しているものと思うのですが、Flashへ送り返す情報は、どの様な形式で出力させないといけないのでしょうか? 当方ActionScript 3.0をCS3で使用しています。

    • ベストアンサー
    • Flash
  • perlの中でphpを使いたいです。

    モバイル用のサイトをxhtmlで作っています。通常のxhtmlのページ(拡張子html)でphpを使う場合は、 <?php echo "<?xml version=\"1.0\" encoding=\"Shift_JIS\"?>"; ?> <? require 'xxx.php'; ?> としています。 今回はperl(拡張子cgi)でphpを使いたいのですが、 $print .= "<?php echo \"<?xml version=\"1.0\" encoding=\"Shift_JIS\"?>\"; ?>"; $print .= "<? require 'xxx.php'; ?>"; とするとエラーになってしまいます。 どうすればいいのでしょうか?教えてください。

    • 締切済み
    • PHP
  • PERLからcshellを実行したいのですが

    PERLからcshellを実行したいのですが、UNIXのコマンドラインから直接実行すると上手く行くのですが、ブラウザからでは欲しい結果が表示されず、ログにも何も残りません。 $ret = system ("/bin/csh /home/my47143/.www/test.csh $argv1"); #$ret = 265/ 265 = 1 戻り値は1、いろいろ調べてみてLANG をCに指定して、パーミションも全て777にしてあります。 シェルの内容は、SQLをしてその結果をtest.logに書き込み、後に同じCGIの中で読み込み標準出力をしています。 open( TEXTFILE, "<test.log" ); $line = <TEXTFILE>; print $line; @lines = <TEXTFILE>; foreach ( @lines ) { print $_; } close( TEXTFILE ); コマンドラインから実行すれば、ちゃんとtest.logに結果が書き込まれています。 この書き込まれた結果をそのままにしておけば、ブラウザにその結果も表示されます。 ですが、シェルで引数で渡す度に結果は上書きするはずなのですが、シェルが実行されている気配がありません。 なんででしょうか?教えてください。

  • Perlでファイルを読み込みタグを削除する方法

    以下のようなソースを書きました。 HTMLファイルを読み込み、タグを全て削除して他のファイルに書き込むソースです。 しかし、上手く動作しません。 問題点を教えていただけませんでしょうか。 お願いします。 #!/usr/local/bin/perl package www3sub2; sub main(){ open(FH, "<googlefile3_.txt"); my @file = <FH>; close(FH); open(OUTB,"> googlefile6.txt"); foreach(@file){ my $line = $_; $line =~ s/<("[^"]*"|'[^']*'|[^'">])*>//g; print OUTB "$line"; close(OUTB); } } 1;

専門家に質問してみよう