WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:[perl] CGI に別の CGI をインクルードするには

カヅサツ[MAIL][URL][WriteDate : Wed Sep 13 16:18:12 2000]

質問は初めてします。

以下の様に HTML を出力する cgi があるとします
(DOCTYPE 宣言とか TITLE 要素とかは略)。

love.cgi:
print "Content-type: text/html\n\n";
print "<p>I LOVE HTML</p>\n";

上記の CGI に下記 CGI をインクルードさせたいのです。

world.cgi
print "Content-type: text/html\n\n";
print "<p>Hello World</p>\n";

もしこれが普通の(SSI の使える) HTML であれば、

<p>I LOVE HTML</p>
<!--#exec cgi="/kadu/world.cgi"-->

とでもするところですが、
http://www.parkcity.ne.jp/~chaichan/qanda/qa160.htm
にあるように CGI の出力の中で上記のようにしても
SSI として解釈させることはできないということですので、
代案を探しています。

perl 5 を利用しています。
http://www2.airnet.ne.jp/kadu/
のディレクトリに置くことを仮定しています。
# 他に何か情報が必要でしたらその旨お願いします。


ちゃいぱ[MAIL][URL][WriteDate :Thu Sep 14 06:25:47 2000]

カヅサツさん、いつもお世話になっています。
プロフマをトップページへリンクさせてもらいました。

さて、質問ですが、requireでもuseでもないですよね。
C言語でいう #include ですか...。

もう、直接、以下に聞いちゃいましょう!
http://x68000.startshop.co.jp/~68user/



わごな[MAIL][URL][WriteDate :Thu Sep 14 07:43:56 2000]

無理矢理ですが・・・
最初に動かすCGIで実際にHTMLファイルとして出力してから
locationを移すというのはどうでしょうか?
#常にHTMLファイルがサーバーに残ってしまいますけど・・・(汗)


Qz[MAIL][URL][WriteDate :Thu Sep 14 12:29:44 2000]

何故、

>love.cgi: 
>print "Content-type: text/html\n\n"; 
>print "<p>I LOVE HTML</p>\n"; 
>
>上記の CGI に下記 CGI をインクルードさせたいのです。 
>
>world.cgi 
>print "Content-type: text/html\n\n"; 
>print "<p>Hello World</p>\n"; 

こんなことしなければ、いけないのか、さっぱりわかりません。
最低限、world.cgi の

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

この1行をはずし、最下行に、1;を追加して、requireするしかないでしょう。
それで目的の動作をするかどうかの保証はありません。
単体で動作することを目的としてつくられたCGI(SSI?)をインクルードしようとすることに無理があると思います。


カヅサツ[MAIL][URL][WriteDate :Thu Sep 14 14:18:54 2000]

Qz 様

> 何故、 
(snip)
> こんなことしなければ、いけないのか、さっぱりわかりません。 

SSI で全ページに CSS の実装が poor な WWW ブラウザには
CSS を呼び出す LINK 要素を読み込ませない CGI を置こうと思うのですが。
それを CGI で出力する HTML 文書にも置きたかったのです。

> この1行をはずし、最下行に、1;を追加して、requireするしかないでしょう。 

ということで、

love.cgi: 
print "Content-type: text/html\n\n"; 
print "<p>I LOVE HTML</p>\n"; 
require "world.cgi";

world.cgi 
print "<p>Hello World</p>\n"; 
1;

で、

> それで目的の動作をするかどうかの保証はありません。 

目的の動作をしているように見えました。

みなさんどうもありがとうございます。


ちゃいぱ 様

> プロフマをトップページへリンクさせてもらいました。

あ、ありがとうございます。
ちなみに上手く行けば来週にはリニューアルです。


Qz[MAIL][URL][WriteDate :Thu Sep 14 18:47:06 2000]


>> この1行をはずし、最下行に、1;を追加して、requireするしかないでしょう。  
(snip) <-便利だ、これ:-)
> それで目的の動作をするかどうかの保証はありません。  

この方法よりは、以下の方法のがいいかもしれません。
CGIスクリプトをいじらなくても、いいですし、出力する文字列を処理できますから。
動作が遅くなる可能性はありますけど。

でも、セキュリティが高いサーバだと、だめかもしれません。

--
#perlのパス
my $PERL = "/usr/local/bin/perl";

#CGIスクリプト
my $SCRIPT = "xxxx.cgi";

#スクリプトの実行
open(IN, "$PERL $SCRIPT|");

#最初の空白行までは、HTTPヘッダなので読み飛ばす
while (<IN>){
  /^\n$/ and last;
}

#本体(?)
while (<IN>){
  print;
}

close(IN);


Qz[MAIL][URL][WriteDate :Thu Sep 14 18:50:54 2000]

見返してみたら、

>open(IN, "$PERL $SCRIPT|"); 

ここで、エラー処理いれてあげないとだめですね。

open(IN, "$PERL $SCRIPT|") or die($!);

とか。
回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]