- 締切済み
perl初心者 「掲示板作成」
はじめまして、最近perlを勉強するために、買った本を参考に掲示板を作成しています。 2つほど質問したいことがあります。 ***質問*** 1:作成した掲示板で、記事を投稿し、その直後に掲示板をリロードすると、先ほど投稿した記事が再びデータファイルに書き込まれてしまいます。 これを防ぐ方法はあるでしょうか。 2:さまざまなスクリプト内でよく見かける『ENV』や『STDIN』は一般的にどのようなときに使うネーミング(?)なのでしょうか?? ******** 質問が分かりにくかったら申し訳ありません。 ソースが必要でしたらアップします。 どうぞよろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- mi-si
- ベストアンサー率35% (200/567)
1.GETでは無くPOSTを使うとある程度防げます。 リロードボタンを付けるのも手です。 HTTPヘッダのlocationで、URLを一度クリアしてしまう方法もあります。(http://www.studyinghttp.net/rfc_ja/2616/rfc2616_ja.html) 2.お約束みたいなものです。cgiを処理するのに必要な情報が入っています。 $ENVにはcgiがプログラムに受け渡す環境変数の値が入っています。 たとえば、FORMがGETで送られたのかPOSTで送られたのかを判別するには環境変数のREQUEST_METHODを参照します。 FORMでPOSTを使った場合はSTDIN(標準入力)として、データが受け渡されます(データの長さは環境変数のCONTENT_LENGTHを見れば解ります。GETを使った場合は、環境変数のQUERY_STRINGの中に格納されます。 また、アクセスしてきたブラウザの種類などを知るのにも使われます。なおcgiの出力はSTDOUT(標準出力)として出力します。通常のprint文の使い方で出力できるので、細かいことを意識しないで済みます。 例: $ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/; if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; }
お礼
ありがとうございます。 質問1はスクリプト外で対処をするという理解でいいのでしょうか。 メソッドはPOSTなのでリロードボタンを作ったり、http://www.studyinghttp.net/rfc_ja/2616/rfc2616_ja.htmlを参考してみたいと思います。 質問2のご回答ありがとうございます。むずかしくてちょっと目が点になってしまいました。環境変数を使ったスクリプトを作ったことがないのですが、一応理解できました。 ありがとうございました。