CGI-BBS > CGI > Perl > ホームページへCGIを挿入する方法を教えてください。


カレッヂ
カレッヂ


質問者 junnitisibasaki  投稿日 3/26(月) 13:04:13
ホームページへCGIを挿入する方法を教えてください。

下記のCGIはランダムで$msgの内容が表示されるものです。
$txtfileに代入するtextfile.txtには次のような形式で
データが入っています。

AAAA
===
BBBB
===
CCCC

読み込むと乱数を発生させてAAAA、BBBB、CCCCが表示します。
CGIを単体で実行したら正しく表示できますがこれを
text.hml等のホームページ内に表示させたいのですがどうすれば良いでしょうか?

hmtl内に特殊タグを置いてそれを置き換える方法は試してみましたが
他人に紹介する場合、URLがhttp://www.home.com/*.cgiとなってしまうので
あまり好ましくありません。http://www.home.com/text.htmlのようにしたいです。

よろしくお願いします。

#!/usr/local/bin/perl
#
$txtfile ="./textfile.txt";
$kugiri ="===";
###############
print "Content-type: text/html\n\n";

open(TXT, "$txtfile");
@txt=<TXT>;
close(TXT);

$txtlist = join('', @txt);
@moji = split(/$kugiri/, $txtlist);

srand(time || $$);
$int = int(rand(@moji));

$msg = "$moji[$int]";
print $msg;

exit(0);
回答者 まさ  [削除]  投稿日 3/26(月) 18:02:21
SSIを使えばいいでしょう。

そのスクリプトをtext.plだとしてtext.html内の表示させたい場所に
<!--#exec cmd="text.pl"-->
を埋め込めば動きます。

ただプロバイダーによってはSSIを記述したファイルは*.shtmlにしないといけないところ
もあるので適宜変更して下さい。

回答者 まさ  [削除]  投稿日 3/26(月) 18:16:35
このスクリプトはちょっと冗長ですね。

データファイルを

AAAA
===
BBBB
===
CCCC

これではなく

AAAA
BBBB
CCCC

こうしてやると

open(TXT, "$txtfile");
@txt=<TXT>;
close(TXT);

$txtlist = join('', @txt);
@moji = split(/$kugiri/, $txtlist);

srand(time || $$);
$int = int(rand(@moji));

$msg = "$moji[$int]";
print $msg;

この部分は

open(TXT, "$txtfile");
@moji=<TXT>;
close(TXT);

srand(time || $$);
$int = int(rand(@moji));

$msg = "$moji[$int]";
print $msg;

こうなり短くなります。

回答者 まさ  [削除]  投稿日 3/26(月) 23:20:54
質問者よりメールがあったので掲載します。
質問者にはこの掲載の許可を頂いています。

-> ------メッセージ------
-> こんばんわ、回答ありがとうございました。しかし私のプロバイダーではSSIを利用す
-> ることが出来ません。よくある、GIFカウンター等はどういう仕組みなんでしょうか?
-> バナー広告がランダムで変わるのをよく見かけるのですがああいうのはどういう処理を
-> しているのかご存知ですか?まだ始めたばかりなのでよく分かりません。よろしくお願
-> いします。
-> ----------------------

できるだけこういった内容はメールではなくて掲示板に書き込んだ方がいいです。
何故かと言えば、同じような疑問を持ってる人もいるかもしれませんので、そう
いった人にも情報を提供する意味があるからです。

さて、本題ですが、SSIが使用できないとなると、これは厄介ですね。
そのページを全てCGIとして出力する以外わたしは思い浮かびません。

GIFカウンターはimgタグでCGIを呼び出しています。
こんな感じです。
<img src="count.cgi">

しかしこれは出力がGIFかJPEGでなければなりません。GIFカウンター
はこのcount.cgiの中でカウント処理をして、GDと言うモジュールを使ってテキ
ストであるカウントデータから画像を作っています。

バナー広告がランダム変わるものも、このimgタグ内のCGIで画像をランダムに
出力しているだけです。作ってらっしゃったテキストをランダムに出力するもの
が、テキスト文字か画像かの違いだけです。

しかしどうしてもテキストを出力したいとなるとこのimgタグは使えません。
その場合普通はSSIを使うのですが、SSIが使用不可となれば、一番簡単な
のはそのページ全てをCGIとすることです。

*.cgiとなるのが嫌な旨書いていらっしゃいましたが、何故でしょうか?
それが一番簡単な方法です。*.htmlのままそれを実現するのは恐らく不可能です。
せいぜい上で書いたimgタグでCGIを呼び出して、GDで画像に変換して出力す
るしかないですね。しかしこれにはネックがあって、とても初心者向きではない
です。なぜかとおえば、GDはモジュールなのでインストールしなければなりま
せん。多くのプロバイダーではモジュールのインストールを許可していません。
また、たとえ許可されているからと言っても、モジュールをインストールしたこ
とがないならかなり難しいです。UNIXの知識も必要です。またmakeの知識も
要ります。これらがないのならGDはインストールできません。

そうなればそのページ全てをCGIにするのが一番楽です。
一度考えて見てください。

回答者 しあわせのツボ  [削除]  投稿日 3/26(月) 23:54:56
どうしても告知するアドレスを.htmlにしたいのなら、"100%,*"のフレームを用意してそこに.cgiを読ませる方法があります。tcupが使っていますね。
metaタグで飛ばすのと大差ありませんが、こういう技もあるということで。
回答者 Katurai Kei  [削除]  投稿日 5/18(金) 15:05:52
gifdog.plというスクリプトを利用すれば、モジュールを使用せずにGIFを並べることができます。
CGI-BEAN http://cgi-bean.virtualave.net/で公開されています。
また具体的な使用法に関してはとほほのWWW入門 http://tohoho.wakusei.ne.jp/www.htm のカウンター設置方法で知ることができます。

返信(回答)する


Web裏技