はじめまして、最近perlを勉強するために、買った本を参考に掲示板を作成しています。
2つほど質問したいことがあります。
***質問***
1:作成した掲示板で、記事を投稿し、その直後に掲示板をリロードすると、先ほど投稿した記事が再びデータファイルに書き込まれてしまいます。
これを防ぐ方法はあるでしょうか。
2:さまざまなスクリプト内でよく見かける『ENV』や『STDIN』は一般的にどのようなときに使うネーミング(?)なのでしょうか??
********
質問が分かりにくかったら申し訳ありません。
ソースが必要でしたらアップします。
どうぞよろしくお願いします。
No.1ベストアンサー
- 回答日時:
1.GETでは無くPOSTを使うとある程度防げます。
リロードボタンを付けるのも手です。
HTTPヘッダのlocationで、URLを一度クリアしてしまう方法もあります。(http://www.studyinghttp.net/rfc_ja/2616/rfc2616_ …
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'};
}
参考URL:http://hoohoo.ncsa.uiuc.edu/cgi/env.html
ありがとうございます。
質問1はスクリプト外で対処をするという理解でいいのでしょうか。
メソッドはPOSTなのでリロードボタンを作ったり、http://www.studyinghttp.net/rfc_ja/2616/rfc2616_ …を参考してみたいと思います。
質問2のご回答ありがとうございます。むずかしくてちょっと目が点になってしまいました。環境変数を使ったスクリプトを作ったことがないのですが、一応理解できました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAで素数だけを出力す...
-
perlでcsvの出力について
-
VBAで巨大なファイルの途中から...
-
MPLABにおけるsyntax errorに...
-
C言語で特定の行を抽出する方法...
-
巨大なテキストの最終行を取得...
-
JavaでCSVファイルを高速に読む...
-
IEだとCGIが正しく動作しないこ...
-
Perlで フォルダ内の全て...
-
文字を一文字ずつ区切りたい
-
ReadLineでの読み出し行を指定する
-
スクロールバーを左側に、又は...
-
batファイルでrenameができませ...
-
readdir()で得られるファイル・...
-
テキストファイルの各行を配列...
-
VBAでCSVファイルの特定行を書...
-
flockについて
-
JSP URLに表示される拡張子 .jsp
-
Edge スクレイピング
-
バッチファイルの作り方(CSV→...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
awkスクリプトでダブルクォーテ...
-
エクセルVBAで素数だけを出力す...
-
DOSコマンドで、標準出力を出力...
-
sprintfについて
-
重複するデータを抽出できる秀...
-
教えて!perlから.exeファイル...
-
自動更新
-
[Perl]ファイル出力のエンコー...
-
Rubyを使ってtelnetで実行した...
-
文字コードの変換(Shift-JISか...
-
Perlからsyslog経由でログを出...
-
無名配列にスライスを使いたい。
-
Perl内でJavaScri...
-
perlでの文字列抽出
-
Perl<->Oracle間での文字化けに...
-
PerlからのCSV出力
-
ファイル出力の改行コードをLFに
-
機器のI/OをArduinoでSDに記録...
-
コンソール出力をテキストに出...
-
Perlでエラーログに日時をつける
おすすめ情報