cgiの実行結果にphpを挿入する方法

このQ&Aのポイント
  • cgiの実行結果にphpを挿入する方法はありますか?
  • csvファイルの一覧から特定のデータを表示するdatabase.cgiを利用していますが、その表示結果をphpで自動表示したいです。
  • htmlファイルではSSIを使えますが、cgiファイルでは使えないため、cgi上でphpが吐き出したファイルをそのまま表示する方法はありますか?
回答を見る
  • ベストアンサー

cgiの実行結果の中にphpを挿入したい

現在、csvファイルの一覧から特定のデータを表示出来るdatabase.cgi を保有しています。 例えば、csvファイル2列目のジュエリーのID(1001)で検索すると、2列目が1001となっている「3列目の真珠、ダイヤモンド... 及びそれぞれのコードナンパー(4列目)」が表示されることが可能です。 例 database.cgi?equal2=1001 で検索 表示内容の中に 真珠 1011 ダイヤモンド 1012 ルビー 1013   と表示させることが可能です。 一方、URLの一番最後でコードナンバーを指定すると、そこにある商品がxmlファイルから自動表示されるphpを組みました。(hoge.php?1011) この2つを組み合わせると、ジュエリーで検索して、3行目の真珠 というの文字をクリックすると、phpにより「xlmファイルにある商品一覧を表示」させることが可能です。 <a href ="./hoge.php?1011>真珠</a> <a href ="./hoge.php?1012>ダイヤモンド</a> <a href ="./hoge.php?1013>ルビー</a> 質問です。 上記のようにクリックさせることにより、hoge.php?1011を表示させることは可能ですが、これをcgi内でそのまま表示したいと考えています。 htmlファイルであれば、SSIを利用して利用可能ですが、今回はcgiファイルですので使用できそうにありません。 一方、phpファイルであれば、file get contents で取得可能のようですが、今回はcgi上での表示ですのでこのコマンドは使えません。 インラインフレームでの表示なら可能ですが、これにはしたくありません。 cgi上でphpが吐き出したファイルをそのまま表示する方法はございませんでしょうか? よろしくお願いいたします。

  • Perl
  • 回答数5
  • ありがとう数8

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

  • ベストアンサー
  • ralf124c
  • ベストアンサー率52% (232/446)
回答No.5

遅くなって申し訳有りません 以下、Sjax版のサンプルです。 CGIからはきだすHTMLと思ってください -----------------------------------------------------------------------------ここから <html> <head> <meta http-equiv="Content-Language" content="ja"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>SJAX</title> <script language="javascript"> <!-- // ------------------------------------- // ------------------------------------- function fCall(CODENUMBER){ var xObj = createHTTPRequest(); var fName = "http://www.hoge.jp/hoge.php?" + CODENUMBER; xObj.open("GET", fName, false); xObj.send(null); // setInterval ( "fCall()", 5000 ); var oText = document.getElementById("ShowData"); oText.innerHTML = xObj.responseText; } // ------------------------------------- function createHTTPRequest(){ if(window.ActiveXObject && !window.XMLHttpRequest){ try{ return (new ActiveXObject('Msxml2.XMLHTTP')); }catch (e) {} try{ retrurn (new ActiveXObject('Microsoft.XMLHTTP')); }catch (e) {} return (null); }else if(window.XMLHttpRequest){ return (new XMLHttpRequest); }else{ return null; } } //--> </script> </head> <body onload="fCall(ここにCGIが受け取ったコードを挿入)"> <span id="ShowData"></span> </body> </html> -----------------------------------------------------------------------------ここまで お役に立てるといいのですが

tajix14
質問者

お礼

ご回答ありがとうございます。 お返事が遅くなり申し訳ございません。 お教え頂いたソースを参照としてSjaxを勉強しだしました。 ここ数日、ANo.1さんの方式ともどもテストを繰り返して おりますがまだうまくいきません。 もうしばらく時間が掛かるかもしれません。 これ以上回答が遅れるのは失礼と思い、ひとまず御礼させ てもらいます。 本当にありがとうございました。

その他の回答 (4)

  • shiren2
  • ベストアンサー率47% (139/295)
回答No.4

ANo. 1です。 では、下記のコードを使ってみてください。 $contentを<<HTMLの中の必要箇所に組み込めば動くと思います。 #!/usr/bin/perl use LWP::Simple; use URI; ... 中略 ... # アドレスを設定すること my $uri = URI->new("http://aaaa.test/hoge.php"); $uri->query($data[2]); my $content = &get($uri); # 必要な箇所に入れる $print .=<<HTML; $content HTML

tajix14
質問者

お礼

ご回答ありがとうございます。 お返事が遅くなり申し訳ございません。 ここ数日、ご教授頂いた方法でテストを繰り返して おりますがまだうまくいきません。 $uri->query($data[2]); がどうしてもうまくいきませんでした。 CGI全体の問題なのだと思います。 もうしばらく時間が掛かるかもしれません。 これ以上回答が遅れるのは失礼と思い、ひとまず御礼させ てもらいます。 本当にありがとうございました。

  • shiren2
  • ベストアンサー率47% (139/295)
回答No.3

ANo. 1です。 >ソースの中で1001を指定して指示することに 動作説明の為に数値を直書きしただけですので、"1001"を変数(今回であれば$data[2])に置き換えていただければ、そのまま使えると思います。 必要な部分に組み込んで使用してください。

tajix14
質問者

お礼

ありがとうございます。 早速試してみました。 CGIの中の $print .=<<HTML; ・・・・・・ HTML で囲まれた部分に use LWP::Simple; use URI; my $uri = URI->new("http://aaaa.test/hoge.php"); $uri->query("1011"); &getprint($uri); を記載すると、そのままの文字が出てしまいます。 また、プログラム部分に記載すると、エラーになってしまいます。 ホームページを見に来た人に見えるように表示するためには $print .=<<HTML; の後に記載するものだと思いますが、状況を見る限り 何か根本的に間違っている気もします。 use LWP::Simple; use URI; my $uri = URI->new("http://aaaa.test/hoge.php"); $uri->query("1011"); &getprint($uri); はCGIのどの部分に記載すべきものなのでしょうか? 本当にご迷惑をおかけし申し訳ございません。 素人で本当に申し訳ございません。

  • ralf124c
  • ベストアンサー率52% (232/446)
回答No.2

もうひとつの選択肢として CGIではきだすリソース内にPHPを呼び出すAjax(またはSjax)コードを埋め込んで「innerHTML」で表示させればどうでしょう? サーバサイドのスクリプトを多重起動することはできない(作り方によっては永久ループならぬ永久呼出状態になってしまう)ので前回答者さまのようにするか、クライアントサイドから呼び出ししなおすしか方法は無いと思います。 実例が必要なら少しお待ちを・・・。

tajix14
質問者

お礼

>CGIではきだすリソース内にPHPを呼び出すAjax(または >Sjax)コードを埋め込んで「innerHTML」で表示させれば >どうでしょう? ありがとうございます。 Ajax(またはSjax)はまだ手をつけたことがないので、ご教授 頂けましたら幸いです。 「innerHTML」という名前からすると可能性があるような気がします。 私のやりたいことを補足いたします。 今回使用しているdatabase.cgiは、HTML表示部分において $data[2] と記載し、database.cgi?equal2=1001 とURLを打つ とHTML上に1001と出てきます。 このことを利用し、CGIの中のソースの一部として1001を書き 込むのではなく、あくまでphp表示上の変数として使用したい のです。 cgiのHTML表示部分に hoge.php?$data[2]  と記載します。 database.cgi?equal2=1001 と表示したときに$data[2] が1001になり、それに対応する hoge.php?1001 の記事がHTML上で表示される。 database.cgi?equal2=1005 と指示したら$data[2] が1005に なり、それに対応するhoge.php?1005 の記事がHTML上で 表示される。 ものとしたいのです。 アドバイス頂けるようなことがございましたらよろしくお願い いたします。

  • shiren2
  • ベストアンサー率47% (139/295)
回答No.1

方法は二つあります。 httpリクエストを送る方法と、直接実行する方法です。 1) use LWP::Simple; use URI; my $uri = URI->new("http://aaaa.test/hoge.php"); $uri->query("1011"); &getprint($uri); 2) $ENV{'QUERY_STRING'} = "1011"; system("/usr/bin/php", "./hoge.php");

tajix14
質問者

お礼

ご回答ありがとうございます。 大変勉強になりました。 ただやはりソースの中で1001を指定して指示することに なってしまいますよね。 私が必要としていることは下記です。 今回使用しているdatabase.cgiは、HTML表示部分において $data[2] と記載し、database.cgi?equal2=1001 とURLを打つ とHTML上に1001と出てきます。 このことを利用し、CGIの中のソースの一部として1001を書き 込むのではなく、あくまでphp表示上の変数として使用したい のです。 cgiのHTML表示部分に hoge.php?$data[2]  と記載します。 database.cgi?equal2=1001 と表示したときに$data[2] が1001になり、それに対応する hoge.php?1001 の記事がHTML上で表示される。 database.cgi?equal2=1005 と指示したら$data[2] が1005に なり、それに対応するhoge.php?1005 の記事がHTML上で 表示される。 ものとしたいのです。 折角、丁寧な回答を頂いたのに説明が悪く申し訳ございま せん。 もし何かアドバイス頂けるようなことがありましたらお願い 申し上げます。

関連するQ&A

  • PHPとCSVの表示 もっとスマートにしたい

    現在PHPに手を出し始めた初心者です まだ分からない事だらけですが、できれば教えてください CSVファイルからデータを読み込んで表示するということを 苦戦しながらやっております ただ、1つのPHPファイルだけでの表示方法がわからず、今は3つのPHPファイルにしています 目的は大区分を選択後、小区分の一覧が表示され、小区分の1つを選択すると詳細が表示される という感じのものです まずCSVファイル 大区分,小区分,名称,詳細 1,101,hoge1,詳細1 1,102,hoge2,詳細2 2,201,hogex1,詳細x1 2,202,hogex2,詳細x2 3,301,hogexx1,詳細xx1 という感じに分けています で1つ目のhoge0.phpで <a href="hoge1.php?code=1">大区分(1)</a> ・・・ code が 1 なら hoge1.php で 小区分 1 の一覧を表示します 次に2つ目のhoge1.phpで $code = $_GET['code']; $lines = file('hoge.csv'); foreach($lines as $line) { $line = rtrim($line); list($bno,$sno,$name,$detail) = explode(",", $line); if ($bno==$code) { echo "<a href=hoge2.php?type=$sno>詳細</a>".$name."<br>"; } } type が 101 なら hoge2.php で 小区分 101 にある hoge1 項目の詳細を表示します 最後3つ目のhoge2.phpで $type = $_GET['type']; $lines = file('hoge.csv'); foreach($lines as $line) { $line = rtrim($line); list($bno,$sno,$name,$detail) = explode(",", $line);{ if ($no==$type) { echo $name.$detail; } } } 一応これでやりたい事は実現できたのですが、あまりにも不恰好で・・・ これを1つのPHP内で処理できるようにするにはどうしたらいいでしょうか? スマートになるやり方があれば教えてください

    • ベストアンサー
    • PHP
  • CGIのサブルーチンの呼び出し方でお聞きしたい事がございます

    お世話になります 画像ファイルをクリックして、サブルーチンを呼び出す方法とかあるのでしょうか? あるシューアーCGIの解説をしているホームページがあり、画像をクリックしますとCGIが呼び出されます、 コードを見てみると私の知らない使い方がしてありました、そのホームページの拡張子はhtmなのですがその中に <A href="http://www.hoge.net/foo/index.cgi?mode=admin&pw=0123"><IMG height=30 alt=hoge src="hoge.gif" width=150 border=0></A> となっており、hoge.gifをクリックするとindex.cgiのadminという、サブルーチンをコールしているようにみえるのですが、このような使い方が出来るのでしょうか? 「A href属性」の使い方だと思うのですが、「a herf cgi 呼び出し」で検索してみましても、今一ピントくるものが有りません、 A hrefタグでcgiの呼び出しの仕方を教えて頂けませんでしょうか。

    • ベストアンサー
    • Perl
  • phpでのリンク

    PHP初心者なのですが、教えて下さいm(__)m プルダウンでの選択史を選ぶと次にまた選択史を表示させたいのですが、PHPを勉強したばかりなのでスマートにソースを書くことができません。 ↓のような感じで一応できたのですが、これはおかしいと言われました。 PHPなのになぜ、リンクのところだけがHTMLになっているの?と。 言われてみればそうなのですが、これ以外よく分からなくて…。 色々調べたのですが、上手くいきませんでした。 <A href="data/hoge.php"><? echo ($hoge_data[0]); ?></A><BR> <A href="data/hoge_1.php"><? echo ($hoge_data[1]); ?></A><BR> : : : このおかげで<hoge.php>、<hoge_1.php>…といっぱい必要になってきてしまい…。 何かスマートな方法はありますでしょうか? 宜しくお願い致しますm(__)m

    • ベストアンサー
    • PHP
  • jqueryで文字列を置換したいのですが。

    jqueryで文字列を置換したいのですが。 例えば<a href="http://*****/database.cgi?keys10=検索文字01"> みたいなアンカーがあったとして、これの”検索文字”の部分のみを置換して 例えば<a href="http://*****/database.cgi?keys10=検索文字02"> の様に置換することは可能でしょうか。 何卒、宜しくお願いいたします<m(_ _)m>

  • Ruby CGI パラメータ

    rubyでCGIのパラメータを一つの変数に&でつないで格納したいです。 (パラメータなしの場合は""にしたい。) ex1) hoge.cgi →para=>"" ex2) hoge.cgi?a=1 →para=>"a=1" ex3 hoge.cgi?a=1&b=2 →para=>"a=1&b=2" どう書いたらよいでしょうか?

  • PHPで同一ページ内でページの読み込みについて

    ナビゲーションから、リンクをクリックすると、ページが読み込まれるプログラムを作っているのですが、どのようにすればよいのでしょか?さっぱりわかりません。アドバイスお願いします。 ↓参考 //ナビゲーション <ul> <li><a href="#">リンク1</a></li> <li><a href="#">リンク2</a></li> <li><a href="#">リンク3</a></li> <li><a href="#">リンク4</a></li> </ul> //リンク1がクリックされたら、これを表示したい。 <?php require("hoge1.php"); ?> //リンク2がクリックされたら、これを表示したい。 <?php require("hoge1.php"); ?> //リンク3がクリックされたら、これを表示したい。 <?php require("hoge1.php"); ?> //リンク4がクリックされたら、これを表示したい。 <?php require("hoge1.php"); ?> ↓イメージ図 index.php内でページの読み込み --------------------------------- | ヘッダー | --------------------------------- --------------------------------- |リンク1|リンク2|リンク3|リンク4| ---------------------------------- ここでページの読み込み --------------------------------- | フッター | --------------------------------- 宜しくお願いします。

    • ベストアンサー
    • PHP
  • CGIを実行した時に作ったファイルの所有者に関して

    Proftpdとapacheを用いてWebサーバを運用していますがCGIやPHPによって作られたファイルの所有者がapacheになってしまいFTPからファイルが削除できません。 hoge.hoge.comはhogeでCGIを実行し aa.hoge.comはaaでCGIを実行することはできないのでしょうか? バーチャルホストでCGIを実行するときは何か別に記述が必要なのでしょうか? ちなみにFTPDは User   nobody Group   nobody apacheは User apache Group apache このように設定してあります。

  • UserDirでCGI版PHPを動作させたい

    お世話になります。 最終的にはsuexecでの動作を目指しておりますが、その前段として UserDirでのCGI版PHPの動作をさせようとしています。 DocumentRoot配下でのCGI版PHPの動作には以下のような設定で成功しました。 [httpd.conf] Action php56-cgi /cgi-bin/php-5.6.27 <Directory "/usr/local/apache2/htdocs/php5test"> Options FollowSymLinks Includes ExecCGI AddHandler php56-cgi .php .html Require all granted </Directory> <IfModule alias_module> : ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/" : </IfModule> # ls -l /usr/local/apache2/cgi-bin/php-5.6.27 lrwxrwxrwx 1 root root 22 11月 8 14:58 php-5.6.27 -> /usr/local/bin/php-cgi* /usr/local/apache2/htdocs/php5test/に置いた whoami.php の内容 <?php echo 'Current script owner: ' . get_current_user() . "<br><br>\n"; $current_user = trim(shell_exec('whoami')); echo 'Current user: ' . $current_user . "<br><br>\n"; $c_time = date("Y年n月j日(D) Ah:i"); print("Current time: $c_time<br>\n") ?> http://xx.xx.xx.xx/php5test/whoami.php Current script owner: root Current user: apache Current time: 2016年11月10日... と表示されます。 -------------------------------------------------------------------- ここから本題です。 $ mkdir /home/hoge/php56 $ cd /home/hoge/php56 $ ln -s /usr/local/bin/php-cgi php-5.6.27 $ ls -l lrwxrwxrwx 1 hoge hoge 22 11月 10 11:47 php-5.6.27 -> /usr/local/bin/php-cgi* $ ls -l /home drwxrwxr-x 30 hoge hoge 4096 11月 10 11:43 hoge/ $ ls -l /home/hoge drwxr-xr-x 2 hoge hoge 4096 11月 10 11:47 php56/ drwxr-xr-x 2 hoge hoge 4096 11月 10 10:41 public_html/ $ ls -l /home/hoge/public_html -rw-r--r-- 1 hoge hoge 331 11月 10 10:41 whoami.php [httpd.conf] <IfModule alias_module>内に ScriptAlias /hoge-php/ "/home/hoge/php56" を追加しました。 UserDir public_html Action hoge-php56 /hoge-php/php-5.6.27 <Directory "/home/hoge/public_html"> Options Indexes FollowSymLinks ExecCGI AddHandler hoge-php56 .php .html Require all granted </Directory> ブラウザで閲覧すると http://xx.xx.xx.xx/~hoge/whoami.php forbidden You don't have permision to access /hoge-php/php-5.6.27/~hoge/whoami.php となります。 ScriptAlias, Action がよく理解できていませんので ご指導よろしくお願いします。

    • 締切済み
    • PHP
  • PHPの実行結果を、htmlファイルで表示

    拡張子.htmlのファイルに、PHPで書き込んだカウンタの数字が表示できない ので、質問します。以下がプログラムです。 counter1.php <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML4.01 Translational//EN//" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head><title>PHP TEST</title></head> <body> <base font size="5"> htmlファイルにPHPの結果を表示できない。 </br> PHPファイルにhtmlを書き加える。 <?php $counter_file = 'counter.txt'; $counter_lenght = 8; $fp = fopen($counter_file, 'r+'); if ($fp){ if (flock($fp, LOCK_EX)){ $counter = fgets($fp, $counter_lenght); $counter++; rewind($fp); if (fwrite($fp, $counter) === FALSE){ print('ファイル書き込みに失敗しました'); } flock($fp, LOCK_UN); } } fclose($fp); print('count:'.$counter); ?> </body> </html> ------------------------------------------------------------------------ counter1.html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html lang="ja"> <head> <meta http-equiv="content-type" content="text/html;charset=shift_jis"> <title>質問内容</title> <base href="file:///C:\Users\Public\Documents/" target="_blank"> <script language="JavaScript" src="hoge3.php"> </script> </head> <body bgcolor="#66ccff"> <h1>更新ボタンを押す度増加</h1> <?php require "counter1.php"?>回 <a href ="counter1.php"> </a> <img src ="counter1.php"> </img> </body> </html> -------------------------------------------------------------------------- Apacheのhttpd.confに追加した行 AddType application/x-httpd-php .html 以上のコードと設定で、自分のパソコンで.htmlのファイルにアクセスすると、 一応カウンタの数字は表示されました。(X)の画像も表示されました。 しかし、これからプロバイダー(ぷらら)が提供するホームページのサービスを利用するとき、 最初に表示するページは、index.htmlにしてください。とありそのページにPHPで作ったカウンタの数字を表示させたいのです。 どなたか、index.htmlにPHPの処理結果を表示する方法を教えてください。お願いします。

    • ベストアンサー
    • PHP
  • CSVファイルのダウンロード方法について

    CSVファイルのダウンロード方法についてご教授願います。 (いろんなサイトやFAQをみてきましたが、いまいちわからなかったのでここで質問させていただきます。) 現在、 (1)アンケート項目データ採取.cgi(集計プログラミング込み)…ブラウザ上表示はではcgiにhtmlテンプレートを読み込み ↓ (2)集計.CSVにてデータ集計 ↓ (3)検索.cgiにて(2)集計.CSVのソートや詳細の検索ができる ---------- 他、(4)修正phpがあり、(2)集計.cgiを集計できます。 ---------- (1)、(3)、(4)各ページで<a href="***/***/集計.csv">_CSVダウンロード_</a>なるものをリンク表記したのですが、ダウンロードできません。 どうしたらよいでしょうか?

    • 締切済み
    • CGI