■=Perl, ■=結果
この前の章では「カラーサンプル表」を作ってみましたが、今度は実際のテキストで背景色と文字色を反映させてみましょう。同じ画面で白地に黒の文字でテキストを表示し、その下に背景色や文字色を入力できるようにします。 |
if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }
else { $buffer = $ENV{'QUERY_STRING'}; }
|
CGIプログラムへのデータの送り方には、POSTメソッドとGETメソッドが代表的です。
GETメソッドはURLの表示欄に
httpd://www.dokodoko.co.jp/cgi-bin/naniyara.cgi?data1=23&data2=34
などのようにプログラム名の後ろに?マークがついて見えます。
POSTメソッドの場合には
httpd://www.dokodoko.co.jp/cgi-bin/naniyara.cgi
までが表示されていて?マーク以降は表示されずません(送信データの中に格納されます)。
CGIプログラムでPOSTメソッドとGETメソッドかを判断するには環境変数(REQUEST_METHOD)を使用します。
GETメソッドでは、?マーク以降のデータを環境変数(QUERY_STRING)に設定してCGIプログラムを起動します。
POSTメソッドでは送信されたデータは標準入力に設定されますので、read 関数を使って読み込みます。
read(ファイルハンドル, 変数, データの長さ); |
@pairs = split(/&/,$buffer); |
| bgcolor | = | FFFFFF | & | fontcolor | = | 000000 |
| 上を |
| と |
| に分けるのです。 |
foreach $pair (@pairs) { }
|
($name, $value) = split(/=/, $pair);
|
| bgcolor | FFFFFF | fontcolor | 000000 |
$value =~ tr/+/ /;
|
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
|
| s/置換前/置換後/e |
| は先頭だけでなく、繰り返しにも適用させるものです。 |
if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }
else { $buffer = $ENV{'QUERY_STRING'}; }
@pairs = split(/&/,$buffer);
foreach $pair (@pairs)
{
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$FORM{$name} = $value;
}
1;
|
#!/usr/local/bin/perl
require 'stdin.txt';
$title = "背景及び文字色";
$bgcolor = $FORM{'bgcolor'};
$fontcolor = $FORM{'fontcolor'};
if ($bgcolor eq '') { $bgcolor = 'FFFFFF'; };
if ($fontcolor eq '') { $fontcolor = '000000'; };
print qq|Content-type: text/html\n\n|;
require 'heder.txt';# ヘッダー読み込み
print qq|<body bgcolor="#$bgcolor">|;
print qq|<blockquote><br>\n|;
#現在の16進数の表示
print qq|<table border="1" bgcolor="#FFFFFF">\n|;
print qq|<tr><td colspan="2">現在表示されている色です</td></tr>\n|;
print qq| <tr><td align="center"><font color="#000000">文字色[<font color="#$fontcolor">■</font>]</td><td align="center">背景色[<font color="#$bgcolor">■</font>]</td></tr>\n|;
print qq|<tr><td align="center">#$fontcolor</td><td align="center">#$bgcolor</td></tr>\n|;
print qq|</font></table>\n|;
print qq|<hr>\n|;
open(COLORTEXT, "./bgcolor_text.txt");
print qq|<font color="#$fontcolor">\n|;
while (defined($line = <COLORTEXT>)) {
print qq|$line|;
}
close(COLORTEXT);
#色替え用16進数入力
print qq|<hr>\n|;
print qq|<form action="./bgcolor_text.cgi" method="POST">\n|;
print qq|背景色 #<input type="text" name="bgcolor" maxlength="6" size="6"><br>\n|;
print qq|文字色 #<input type="text" name="fontcolor" maxlength="6" size="6"><br>\n|;
print qq|<input type="submit" value="表示">\n|;
print qq|<input type="reset" value="クリア">\n|;
print qq|</form>\n|;
print "</font><br>\n";
print "</blockquote>\n";
require 'fotter.txt';# フッター読み込み
exit;
|
bgcolor_text.cgi
| | Back | Coco's Home | ココとPerlで遊びませんか | |