WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:完成している認証プログラムについての質問

0:[投稿] 白くま [2004/03/02 02:05 ][環境:windowsXP,IE6 Apache,CGI,perl]

自分は現在PerlによるCGIプログラミングを勉強中の者です。
参考書に載っていた掲示板を作ってみたのですが、ごく基本的な機能しか備えてないので何か味気なく、とりあえずパスワード制限をつけてみようと思い、KentWebさんからフリーでダウンロードできるパスワード制限ソフトのlogin.cgiというソフトをダウンロードしました。そしてlogin.cgiを解析しそれがどのような処理を行っているのかを学び、自分の掲示板にオリジナルのパスワード制限機能を付けようと思っているところです。

そこでlogin.cgiのソースを解析していてよく分からない処理を行ってるところがあります。
それはデコード処理の部分なのですが、


@  if($ENV{'REQUEST_METHOD'} eq "POST"){
      read(STDIN, $buf,$ENV{'CONTENT_LENGTH'});
   }

A  foreach (split(/&/, $buf)){
      local($key, $val) = split(/=/);
      $val =~ tr/+//;
      $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;

      #HTMLの文字の処理は省略

      $in{$key} = $val;
  }


自分なりの見解では、@でリクエストを送信した方法確かめPOSTの場合に入力に送信されたバイト数を$bufに代入。
Aが全体的によくわからないです。
・まずはforeachで$bufの中身を"&"で区切ったものを特殊変数"$_"に代入??
・次ぎにlocal変数で"$key"と"$val"を宣言するがその時変数の中身は"="で区切る?("$key"と"$val"はこのプログラムで初めて出てきたのになぜこんな事を??)
・次ぎに"$val"の中身をチェックして"+"があったらそれを消す。
・次ぎに"$val"をチェックし、%([a-fA-F0-9][a-fA-F0-9])と同じ文字列を見つけたら(始めについている"%"はハッシュのこと??)、pack("C",hex($1))/egで"$1"を16進数と理解しバイナリデータに変換する。という処理。
・最後に$in{$key}に$valを代入。


自分が調べたところによると、デコード処理とは一定の規定に基づいて符号化されたデータを復元し、もとのデータを取り出す事となっていました。しかし、上のソースの処理を見てもなにがなんだか分からないのですがどなたか上のソースを理解できる方がいましたら、どの様な意味なのかおしえてもらえませんでしょうか?


1:[回答] 薫 [2004/03/02 03:00 ]

foreachやsplitの意味やデコードの解説などは、その参考書に載っていませんか?
「perl デコード 解説」といったキーワードで検索すると有益なサイトが見つかりそうです。
さしあたり、こんなところはどうでしょうか。
http://www.psl.ne.jp/perl/psrc_decoding.html
http://poizun.jp/content/cgitukurou/decoo.html

ご参考までに。


2:[回答] 通りすがり [2004/03/02 09:30 ]

とりあえず「有益なサイト」ぺたり
http://www.din.or.jp/~ohzaki/perl.htm#JP_Escape

>>0
>      $val =~ tr/+//;
     $val =~ tr/+/ /;
の間違いでは?…


3:[完了] 白くま [2004/03/08 02:40 ]

返信遅くなりました。やっとわかりました。
教えてもらったサイトをみながら考えてわかったのですが、
split(/&/,$buffer)
↑何のためにこの処理をやっているのかどーにもこーにもわからず色々調べてました。
そんな時にここのサイトの基礎講座を見直していたら環境変数のところにエンコードやデコードについての詳しい内容が普通に載っていました。
http://www.parkcity.ne.jp/~chaichan/src/perl04.htm#URL
こんなに近くに丁寧な説明付きの答えがあったとは・・・すみませんでした!!
薫さんと通りすがりさんありがとうございました。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World