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&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

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

今、PHPでプログラムを作っています。
そのプログラムからPerlで作られたプログラムにデータを渡して結果を受け取りたいと思います。

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

Aベストアンサー

http://jp.php.net/manual/ja/language.operators.execution.php
http://ml.php.gr.jp/pipermail/php-users/2002-November/011279.html

こんなのでどうでしょう。但し、記されている注意の通りです。

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

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

Aベストアンサー

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

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

Qphpの中で外部のcgiを実行させる方法

aaa.phpの場合、外部のphpファイルをincludeで呼び込めますが、ではaaa.phpでcgiを呼んで来て実行させることはできるのでしょうか?

Aベストアンサー

echo file_get_contents('hoge.cgi');

みたいにすれば呼び出る、というようなじょうほうを見つけました。
すいませんPHPできないので、本当にできるかは分かりません。

リファレンス見ましょう。
http://jp2.php.net/manual/ja/funcref.php

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

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

Aベストアンサー

speeding seeds to grow

QPHPで別PHPを呼び出す。

PHPプログラムないで別PHPを呼び出し戻り値を受け取ろうと考えています。


test1.php-------------
<?php
print "<html><body>\n";
$return_data= exec(/usr/local/bin/php ./test2.php?param1=1¶m2=2);
print $param1."+".$param2."=".$return_data;
print "</body></html>";

test2.php------------------
<?php
$return_item = $param1 + $param2;
print $return_item;
?>

のように、test1.phpからパラメータを渡し、
test2.phpで計算をして答えをtest1.phpに返す
プログラムを作成しました。

test1.phpからtest2.phpをパラメータをつけて渡すのが
うまくいきません。

execではパラメータをつけることはできないのでしょうか?もしくは他の方法はないでしょうか?

functionやincludeではなく上記の方法で行いたいと思っております。

お手数ですが、アドバイスお願い致します。

PHPプログラムないで別PHPを呼び出し戻り値を受け取ろうと考えています。


test1.php-------------
<?php
print "<html><body>\n";
$return_data= exec(/usr/local/bin/php ./test2.php?param1=1¶m2=2);
print $param1."+".$param2."=".$return_data;
print "</body></html>";

test2.php------------------
<?php
$return_item = $param1 + $param2;
print $return_item;
?>

のように、test1.phpからパラメータを渡し、
test2.phpで計算をして答えをtest1.phpに返す
プログラムを作成しまし...続きを読む

Aベストアンサー

こんにちは。

CやJAVAやっていれば、すぐわかるのでしょうが・・・。
コマンドライン上からパラメータを渡す方法を考えてください。

PHPのようなC言語ライクな言語では慣用的に、

argv や argc といった「arg」が付く変数名が特別な扱い方をされます。
JAVAだと args ですね。
で、PHPだと、
$argv と $argc になります。

$argv は、引数で渡されたパラメータの配列です。
$argc は、パラメータの個数が格納されています。

パラメータの渡し方は、

"/usr/local/bin/php ./test2.php aaa bbb"

のように、半角で区切った形になります。

GETのように、スクリプトのあとに aaa=bbb&ccc=ddd と渡すと
「&」以降が特殊な値ととられてしまいます。

具体的にいうと、 test2.php のパラメータを受け取る部分は以下のようになります。

$param1 = $argv[1];
$param2 = $argv[2];

で、$argv[0] には、./test2.php が入っています。(実行させたいスクリプトへのパス)
また、$argc には、3 が入っています。(配列$argv の要素数)

次に、実行結果を受けとる方法ですが、

test2.phpから、実行結果を受け取りたい場合は、exec 関数は、他の言語の exec 関数より便利に出来ています。

test1.php を以下のようにしてください。

exec("/usr/local/bin/php ./test2.php aaa bbb" , $rec , $status);
if ($status != 0){
print "失敗しました";
exit(1);
}

test2.php は、

print $return_item;
exit();
?>

とした場合、
$rec に print で出力した結果が入っていると思います。

※注意

実をいうと $rec には意図した結果以外に色々なデータも入っています。
たとえば、test2.php で、

$aaa = "aaaa";

print $aaa;

とした場合、
$rec には、

$rec[0] : Content-type: text/html; charset=EUC-JP
$rec[1] : X-Powered-By: PHP/5.0.2
$rec[2] :
$rec[3] : aaaa

という値が入っています。
$rec[0] から $rec[2] までは環境によって違います。つまり、test2.php から受け取ったデータが $rec のどの要素に入っているかは、環境によって違ってきますので、まず、


exec("/usr/local/bin/php ./test2.php aaa bbb" , $rec , $status);
if ($status != 0){
print "失敗しました";
exit(1);
}
print_r($rec);


で、確認してみてください。

こんにちは。

CやJAVAやっていれば、すぐわかるのでしょうが・・・。
コマンドライン上からパラメータを渡す方法を考えてください。

PHPのようなC言語ライクな言語では慣用的に、

argv や argc といった「arg」が付く変数名が特別な扱い方をされます。
JAVAだと args ですね。
で、PHPだと、
$argv と $argc になります。

$argv は、引数で渡されたパラメータの配列です。
$argc は、パラメータの個数が格納されています。

パラメータの渡し方は、

"/usr/local/bin/php ./test2.php aaa bb...続きを読む

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.「私はイーベイのガイドラインを何であっても受け入れます」

 これでいいですかね。

QCGI内でphpを含むhtmlを読込みたい

はじめまして。makademiと申します。
phpはまったくの初心者ですので、的外れでしたらすみません。

現在、以下のような構成のアンケートフォームを作成しています。

form.cgi
↓読み込み
input.html 入力画面
check.html 確認画面
error.html エラー画面
end.html  完了画面

全てのhtmlはcgiでコードを読込んだ後に、print文で書き出しております。

今回はこのhtml内にphpのコードを書き込み、phpを動作させたいのですが、この場合どのようにすればよろしいでしょうか。

phpの動作の前提が『ファイル名.php』であるかと考えてますので、これだと拡張子は.cgiになってしまいます。

何か手はないでしょうか。

Aベストアンサー

CGIとPHPはそもそもの動作する仕組みが違うため、そのままではできません。
一応、CGIの拡張子をPHPとして実行することは可能ですが、その場合はCGIとしては機能しません。

PHPは仕組みが違うと書きましたが、PHPにはCGIモードやコンソールモードといったものもあります。
たとえば、CGIモードの場合、perlのようにCGIの拡張子にして、ファイルの先頭部分に#!/usr/local/bin/phpのようにphpのコマンドラインのパスを入れてあげればCGIとして動作するはずです。

また、Perlやそのほかの言語で作成したCGIに.phpファイルのようなものを読み込みたい場合、少し手間ですが、コマンドラインのphpに.phpファイルを引数にして渡してあげれば、phpとして動作した結果のHTMLを受け取ることができるはずです。

はずばっかりですが、実際には、そういう動作は用意されているのは知っていますが、どう考えても普通にphpやperlを実行した方が早いので私はやったことはありません。

そもそも、そんなに言語をまぜこぜにする利点はあまりありませんので・・・苦労の方が多いですよ。

CGIとPHPはそもそもの動作する仕組みが違うため、そのままではできません。
一応、CGIの拡張子をPHPとして実行することは可能ですが、その場合はCGIとしては機能しません。

PHPは仕組みが違うと書きましたが、PHPにはCGIモードやコンソールモードといったものもあります。
たとえば、CGIモードの場合、perlのようにCGIの拡張子にして、ファイルの先頭部分に#!/usr/local/bin/phpのようにphpのコマンドラインのパスを入れてあげればCGIとして動作するはずです。

また、Perlやそのほかの言語で作成したCGIに...続きを読む

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

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

 直訳です。

Qperl内でPHPを動かす?

perlでhtmlを書き出しています。
そのhtmlにPHPを埋め込みたく思い、書き出されたhtmlにPHPを記述して
phpとして保存。動作を確認しました。

perlで書き出している全てのページにこのPHPを埋め込みたく思い、perlの
print <<EOF; ~ EOF の間に <?php ~ ?> を埋め込みましたが動きません。
当然の結果なのでしょうか… 何か方法があればご教示願います。 

下記のようなページも見つけましたが、コードをperlに貼り付けても
動作しません。直接貼り付けるのではないのでしょうか?
http://phpspot.org/blog/archives/2006/03/perlphp_2.html

どうぞ宜しくお願いします。

Aベストアンサー

> この場合、$member1 = "ddd"; の部分を $member1 = "$xxx"; としている箇所は
> 当然$xxxのまま表示されていますが、これはもう手動か別のアプリで書き換えるしかないですよね?
> 実はこの"aaa""bbb"…"ddd"の部分が全部変数なんです。

方法2で、PHPの変数を示す$は\$に、Perlの変数を示す$はそのまま、
という書き換えをすればいけます。

---ここから---
print <<EOF;

<?php

\$nam = fopen("​http://www.aaa.co.jp/bbb/ccc.html","r");

while(!feof(\$nam)){
\$line = fgets(\$nam,1024);
\$li_array[] = \$line;
}

\$li_nam = implode("", \$li_array);

\$member1 = "$xxx";
\$member2 = "$yyy";
\$member3 = "$zzz";
---以下略
といった感じにすれば、$xxxの所は、HTMLファイルに出力した段階で、Perlの変数$xxxの内容で置き換えられます。

> この場合、$member1 = "ddd"; の部分を $member1 = "$xxx"; としている箇所は
> 当然$xxxのまま表示されていますが、これはもう手動か別のアプリで書き換えるしかないですよね?
> 実はこの"aaa""bbb"…"ddd"の部分が全部変数なんです。

方法2で、PHPの変数を示す$は\$に、Perlの変数を示す$はそのまま、
という書き換えをすればいけます。

---ここから---
print <<EOF;

<?php

\$nam = fopen("​http://www.aaa.co.jp/bbb/ccc.html","r");

while(!feof(\$nam)){
\$line = fgets(\$nam,1024);
...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報