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

このQ&Aに関連する最新のQ&A

A 回答 (4件)

>$data = '/***/​www/print.php';​


>open(FH,$data);

これだと、PHPの実行結果ではなくて、もろ、print.phpを開いています。
なので、www/print.phpをPHPで実行した処理結果で、置換処理等を行わないといけないです。

○PHPをコマンドラインから実行
http://phpspot.net/php/man/php/features.commandl …
http://www.spencernetwork.org/memo/tips-6.php

○Perlのファイル操作http://www.ipc.hokusei.ac.jp/~z00104/perl/fileha …

あたりを参考にして、
$PHP = '!/usr/bin/php'; #PHPのパス
$PHP_FILE='/***/​www/print.php';​#実行するPHP
open FH, "$PHP -q $PHP_FILE|";
@list = <FH>;
close FH;

ってな具合でいけるのではないかと、思います。
PHPはないので、未確認ですが。

あと検索は、「php コマンドライン」や「perl パイプ」あたりでしてみてはいかがでしょうか。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/11/18 22:26

NO3、ちょっと間違いがあります。


$PHP = '!/usr/bin/php'; #PHPのパス
びっくりマークはいらないですね。
$PHP = '/usr/bin/php'; #PHPのパス
    • good
    • 0

>perlに「php」という命令があるということですか?


・・・・・
こういう形と同じ事を言ってるんだけど・・・
 system "ls -1"

サーバ側にcli版phpが無いとできない
 system "php print.php"
    • good
    • 0

php print.php


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

この回答への補足

>php print.php
>みたいな形で呼んで結果を取り込んだらだめなのかな?パイプとか。

perlに「php」という命令があるということですか?
検索したのですが、ちょっとうまくひっかけることができなかったので
もう少しつっこんだ感じでお伺いできますでしょうか。
要するにperlで結果を取り込んでその後divを置換で消すとか、単純な処理を考えています。
phpはあくまでサブルーチン的に別処理の結果を吐き出すためだけに使用しています。

>systemだかexecだかで呼ぶんじゃなかったっけ?

これを使うとどういう形で返ってくるのか、自分の知識ではいまいち心元ないです。実行させるのはいいとして、結果の受け取りにまた手続きがいるというか、何か変数を用意すればそれに入ってくれるのかなど、です。
元のプログラムにもあるように1行ずつ変数に入れて、必要な部分だけ抜き取って加工してprintで表示させたい思惑です。

補足日時:2006/11/07 00:37
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q英語から日本語へ

英語のニュースサイトを見ていて、思ったのですが・・・。
どなたか英語から日本語へ訳してくれる良いソフトを教えてください。
電気屋さんへ買いに行ってもたくさんあるし、どれが良いのかわかりません。
Windows Meを使っているので、それに対応できるものがいいです。
どうぞ、教えてください!!

Aベストアンサー

このコーナーでも何度か答えていますが、インターネット上でただで翻訳する
サイトでしたら
http://it.jeita.or.jp/aamt/list-j.html
に行けば選り取りみどりです。ただ、InfoseekやExciteを使って満足できない
のでしたら、他のも満足できないかもしれません。

お店で買うソフトでしたら、私はThe翻訳オフィスというのを使っていますが、
結構便利です。下記のURLで体験版がもらえますので、もらって試されてはいか
がでしょう。

参考URL:https://www3.toshiba.co.jp/cn3/honyaku_reg/form.htm

QPerlの初歩の初歩の初歩(#!/usr/local/bin/perlについて)

いつもお世話になっています。
Perlを勉強し始めて1か月たっていない人間です。
調べてもよく分からず、気持ち悪いので
どうか教えてください。

Perlで記述するとき1行目にperlへのパスを書きますが
プロバイダでのパスは「#!/usr/local/bin/perl」です。
私のPC環境では「#!d:/perl/bin/perl」になります。

ある日、PC環境で動作検証するとき
間違ってプロバイダのパスのほうを記述してしまいました。
しかし、それでもPC上で動作しました。

なぜパスが違うのに動作するのでしょうか?

なお、わけの分からないまま
「Perlへのパスを通す」というのを昔
やったことがあります。関係がありますか?

ある場合、それをすると
「#!d:/perl/bin/perl」の「d:/perl/」の部分が
「/usr/local/」と同になるということなのでしょうか?

Aベストアンサー

httpdの種類や設定によっては1行目のパスを無視して動作させることが出来ます。
例えばAnHTTPDは最初からcgiの拡張子とperlを関連付けて使う仕様だった気がします。
Apache1.3(Win)もWindowsのOSでcgi拡張子とPerl.exeの関連付けがしてあれば動作させることが出来ます。

Q英語に詳しい方、英語から日本語へ翻訳おねがいします。英文は短いです。

英語に詳しい方、英語から日本語へ翻訳おねがいします。英文は短いです。
Please ship quickly as possible, pelase refund any
shipping overage.
この英文は船で送ることを意味しますか?
それとも飛行機ですか?

Aベストアンサー

 「出来るだけ早く送ってください、送料の払い過ぎがあれば送り返してください。」

 shipping とは「船便」に限らず、他の輸送手段についても使われます。物と距離と送料の詳細が分かりませんが「出来るだけ早く」というのは出来れば航空便を意味しています。

Q[返信]

夜分にすみません。
[~]の鍵括弧はどういう言語なのでしょうか?
htmlの辞書に載っていませんでした・・。

Aベストアンサー

ブラウザで見ると
[返信]
って感じになり「返信」のトコだけ下線付きのリンクになります。
「[」と「]」は単なる文字ですよ(笑)

Q英語の翻訳お願いします。 短い英文です。日本から英語へ翻訳お願いします

英語の翻訳お願いします。 短い英文です。日本から英語へ翻訳お願いします。

I obeyed to whatever eBay/Paypel agreement, I do whatever need to be done, as set by eBay/Paypal.
 
宜しくお願いします。

Aベストアンサー

I will accept whatever the guidelines the eBay may have.「私はイーベイのガイドラインを何であっても受け入れます」

 これでいいですかね。

Aベストアンサー

>画像ヘッダとはどういうものでしょうか?

Content-type: image/gif
Content-type: image/png
Content-type: image/jpeg

など、画像タイプごとに決まっています。
<img>タグに普通の画像ファイルが指定されている場合は
Webサーバが画像ファイルの拡張子から判断して返してくれ
ますが、CGIから返されるデータの種類は拡張子からは判断
できないのでCGI内部からヘッダを返す必要があります。


●CGIがPerlの場合で、GIF画像をCGIから返す例
#!/path/to/perl
print "Content-type: image/gif\n\n";
open(GIF, "file.gif");
binmode(GIF); binmode(STDOUT);
print <GIF>; close(GIF);

もちろん、CGIからは画像フォーマットを返せばいいので、
ファイルから読まずにあらかじめCGIソース内に画像データ
を持っておいて出力する方法も可能です。


ちなみに、多くのCGIではHTMLコンテンツを返す場合が多い
ので、ヘッダは以下のようになります。

print "Content-type: text/html\n\n";

>画像ヘッダとはどういうものでしょうか?

Content-type: image/gif
Content-type: image/png
Content-type: image/jpeg

など、画像タイプごとに決まっています。
<img>タグに普通の画像ファイルが指定されている場合は
Webサーバが画像ファイルの拡張子から判断して返してくれ
ますが、CGIから返されるデータの種類は拡張子からは判断
できないのでCGI内部からヘッダを返す必要があります。


●CGIがPerlの場合で、GIF画像をCGIから返す例
#!/path/to/perl
print "Content-type: image/gif\n\n...
続きを読む

Q【英語】種から成長へ。種から成長に。というような表現でSEED(種)とSPEED(成長)を使って上記

【英語】種から成長へ。種から成長に。というような表現でSEED(種)とSPEED(成長)を使って上記のような意味になる英語を作ってください。よろしくお願いします。

Aベストアンサー

speeding seeds to grow

Q「<」や「>」を「&lt;」や「&gt;」に変換させなかったらどうなるのでしょうか?

今CGIをカスタマイズしています。
書き込みフォームでタグを使いたいのですが、タグをそのまま書き込むとHTML出力時に、&lt;や&gt;に変換されて表示されてしまいます。
なのでその変換する処理を無くしたいと思っているのですが、その処理を無くすとどういう不具合があるのでしょうか?無くそうと思っているのは下記のような箇所です。
~ s/</&lt;/g;
~ s/>/&gt;/g;
(わざと全角で書いてます)
書き込みデータにはdatファイルを使っています。

Aベストアンサー

念のため・・・
No.4は表示するときではなく、
>formからのデータ取得時にタグを解析して<b>や<font color="~">以外のタグは変換する
方法のつもりで書きました
※<>→&lt;&gt;変換処理の直後に入れる。

いちいち<font color="~">と記述するのは大変なので、
<色=red>赤文字</色>などと覚えやすいタグにするのも親切でいいかも

#<色=red>~</色>を<font color=red>~</font>に
=~ s/&lt;(色)(.*?)&gt;(.*?)&lt;\/\1&gt;/<font color$2>$3<\/font>/gi;

Q英語から日本語へ翻訳お願いします。スウェーデン人の方が英語を書いていま

英語から日本語へ翻訳お願いします。スウェーデン人の方が英語を書いています。宜しくお願いします。

could you ship both bag on 12 May (next week Tuesday) as I'm
not home next week. Its good for me if I got the bag a week after.

Aベストアンサー

 「来週は家に居ないので、バッグは両方とも五月十二日(来週の火曜日)に発送して下さいませんか?。一週間のちに受け取る方が私には都合がいいです。」

 直訳です。

Q/usr/local/bin/perl の発音

あまりにも初歩の質問かもしれませんが、
/usr/local/bin/perl
・・・を、声に出すとすると、
/ユーザー/ローカル/ビン/パール
・・・で、良いのでしょうか?

Aベストアンサー

新版 UNIX 由来/読み方辞書
http://x68000.q-e-d.net/~68user/unix/unix-term-dic.html


人気Q&Aランキング

おすすめ情報