goo blog サービス終了のお知らせ 

ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

FORMで来る値をGETでもPUTでも何でも保存するCGIを、ある実験のために作ってみる

2006-02-09 13:21:50 | JavaとWeb

 いやー、昨日は、「BREWでアジャイル」とかやったら、不評だったみたいで(^^;)。。
あとで、イラク人質事件の今井さんネタをもってきても、挽回むなしく、おとといと同じくらいのアクセス数(345 ip)でした(おとといは、かなり低いほうなのです)。

 ということで、今日は、ネットねたに戻します(「BREWでアジャイル」はいつどこでやるの?については、このブログの一番最後に書きますね)




 テストとか、実験とかで、FORMタグで渡す引数について、
 全部、出してみたいこととかありませんか?

  え、ない。

  終了。。。

となってしまうので、あると思ってください。

とくに、
<FORM METHOD=POST ACTION="cgiout.cgi?atai=val1">
のように、メソッドをPOSTを指定してるのに、CGIのURLに、値の引数を付けちゃってる場合とか、だいじょうぶかとか。。。

っていうので、そーいうプログラムをつくってみました。




■■ FORMタグで渡す引数ぜんぶかきだしプログラムの仕様
・POSTの内容も、GETの内容も、とにかく、引数でわたってきたものは、名前と値を全部出す。

・メソッド名も出す

・カウンタをもっていて、ファイルに書き出す。
  カウンタ名は、CGIのあるところに、 ファイル名 count.datで
  結果は、1アクセス1ファイル。   ファイル名 kekka_カウンタ番号.txt

・で、相手には、XMLで、

<?xml version="1.0" encoding="iso-8859-1"?>
<response>
<error>0</error>
</response>

(実際には<>は、半角です)

と返す。。
。。。はあ?と思うと思いますが、これについては、実験がうまくいったら書きます。




■■ プログラム

こんなかんじ
#!/usr/local/bin/perl
use CGI;


				#################################
				#	必要な変数の取得	#
				#################################
##引数を取得
#POST型
read (STDIN, $qs, $ENV{'CONTENT_LENGTH'});
@qs = split(/&/,$qs);
foreach $i (0 .. $#qs) 
{
	($name, $value) = split(/=/,$qs[$i],2);
	$value =~ tr/+/ /;    #“+”を空白
        $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;   # %XX変換
	$kekka{$name} = $value;
}

#GET型
$qs = $ENV{'QUERY_STRING'};
@qs = split(/&/,$qs);
foreach $i (0 .. $#qs) 
{
	($name, $value) = split(/=/,$qs[$i],2);
	$value =~ tr/+/ /;    #“+”を空白
        $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;   # %XX変換
	$kekka{$name} = $value;
}

				#################################
				#	カウンタ取得		#
				#################################
#カウンタの取得
$cntfname =  "count.dat";
open(LOCK, ">" . $cntfname . ". lock");
flock(LOCK,2);
if ( -e $cntfname )
{
	open (IN, $cntfname);
	$count=<IN>;
	close(IN);
}
else
{
	$count	=	0;
}
$count=$count+1;
open (OUT, ">" . $cntfname);
printf(OUT "%d",$count);
close(OUT);

flock(LOCK,8);
close(LOCK);
unlink($cntfname . ". lock");

chmod 0600,$cntfname;


				#################################
				#	ファイルに書き出し	#
				#################################
#ファイルを作成する
$outfname = "kekka_" . $count . ".txt";
# 書き込み用にファイルを開く
open(OUTF, ">". $outfname );
print OUTF "METHOD = $ENV{'REQUEST_METHOD'} ¥n";
while (($key, $val) = each(%kekka))
{
	print OUTF "$key : $val ¥n";
}

# ファイルを閉じる
close( OUTF);


				#################################
				#	返信			#
				#################################
#表示
print "Content-Type: text/xml¥n¥n";
print '<?xml version="1.0" encoding="iso-8859-1"?>';
print '<response>';
print '<error>0</error>';
print '</response>';

(上記の< > ¥は、実際には、半角です)




さ、実験だ(^^)v
うまくいったら、なにやってるか、報告します。

●「BREWでアジャイル」の今後

 ウィリアムのいたずらのBREWのページに、目次をかきました。
 今後、ホームページに直接、あるいは、ねたがないときに、この中から選んで、ブログに書いてリンクしたりして、進めていこうかなあ。。なんて考えています。

 とりあえず、連載は、見てくれる人がいなくなっちゃいそうなんでないけど、ひまができたら、書いていきます。でも、今、ひまがない(>_<!)



この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« イラク人質事件の今井紀明さ... | トップ | トラックバックのプロトコル... »
最新の画像もっと見る

JavaとWeb」カテゴリの最新記事