ソケットを使わないGET書き込みCGIを作成してみよう。
今日は初心者への連載をさぼって、客寄せ的に赤ん坊でも作れるようなCGIを作成してみます。
ですから、この次は初心者への連載が終了してからになると思います。
perl****と言えばソケットを使わないとできないと思われがちですが、そうでもありません。
何もそっくりに作る必要はありません。
似たような機能があれば初心者には相応なのです。
ここでは、自分オリジナルのperl[あなたの名前].cgiを作成しましょう。
便宜上ここではperlgt.cgiで名前を統一します。
各自、自分で名前を考えて下さい。
さてそれでは本題に入りましょう。
まず、環境変数チェックCGIを作成して下さい。
%ENVを使用したものがよいです。
サンプルを用意しましたので、
#!/usr/local/bin/perlを環境に合わせて変更してからご使用下さい。
perlを実行する環境によっては、使用できないものもあるので最初に断っておきます。
これはあると便利と言うだけなので、説明自体は省きます。
最初に流れ図のようなものを書くとよいのですが、今日は簡単なものなので省きます。
1、最初はhtmlファイルを作ってみましょう。
サンプル
その中で注意すべきところを説明します。
まずはこれです。
<FORM METHOD=GET ACTION="perlgt.cgi"target="new">
CGIの名前がperlgt.cgiなのでそう記述します。
メソッドについてはこの場合、POSTと記述してもあまり意味がないのでGETとしておきます。
target="new"と記述することによって、別のウインドーを作成します。これはそうしないと使いづらいからです。
<INPUT TYPE="text"NAME="content"SIZE=40>
<INPUT TYPE="text"NAME="url"SIZE=40>
変数はurlとcontentとして下さい。
これをperlgt.htmlとして保存します。
2、次はCGIをperlで作成してみましょう。できれば簡単な掲示板を作れる程度の知識があるとよいです。
Location:を使用することになります。
#!/usr/local/bin/perl まずはこの記述です。これはおまじないと考えてよいでしょう。サーバによってこの記述の仕方が異なるので注意が必要です。
require './jcode.pl';
「;」を忘れないで下さい。これも深く考えないで下さい。jcode.plについては同ディレクトリに入れて下さい。
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $str, $ENV{'CONTENT_LENGTH'});
} else {
$str = $ENV{'QUERY_STRING'};
}
@new = split('&', $str);
foreach $i (@new) {
($variable, $value) = split('=', $i);
$value =~ tr/+/ /;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg;
&jcode'convert(*value, 'sjis');
$value =~ s/\r\n/\n/g;
$value =~ s/\n/<BR>/g;
$value =~ s/\r/\n/g;
$bbs{$variable} = $value;
}
これも深く考えないで下さい。おきまり文句だと思って下さい。
ここでは送信された情報がGETか、POSTを識別して、個別の対応をしてます。その後、送信された情報をCGIで使えるように処理をして
、変数にしまっています。
$url = $bbs{'url'};
$content = $bbs{'content'};
ここで、変数に代入しています。
$main_html="./perlgt.html";
先ほどのhtmlファイル名を便宜上変数に代入しています。
print "Location: $url?$content\n\n";
これでurlを出力します。$urlにGETでアクセスします。ただし?以下に$contentがありますから、$contentの情報をそのアクセス先に送信します。
最後にexit;を記述しておしまいです。アトハこれをperlgt.cgiと言う名前で保存すればOKです。
これはイメタグでの書き込みと大差ありません。
かっこつけて、perlでやっただけです。
今日使ったファイルです。
1、env.cgi
2、perlgt.html
3、jcode.pl
4、perlgt.cgi
すべて同じディレクトリで・・
この次ではソケットなるものを使用します。
このようにすすめてきたいと思います。
ここでつくったものはたいしたことはありません。
perl****式の名前を付けるのは正確でないでしょう。
これでどの程度理解できるのか反応を見たい、と言う意味あいも含めてあります。
なお、ここに書かれていることは転載可能です。直リンク、無断リンクもOKです。
文句、苦情、ご要望はhttp://neo.zipang.ne.jp/cgi-bin/home?shimane01/27までお願いします。