実行結果はこちら
全ての環境変数を出せるように、indexにはポストする作業があります。


ポストせずに直接cgiにアクセスした場合の実行結果
上のURLは前者はポスト、後者はゲットで取得モードが変わる。
index.htmlにあるフォームにて、何も入力しなくてもCONTENT_LENGTHには24の長さが入る。
しかし、何か一つを選択、又は文字を入力すると極端に長さが長くなる。実際にブラウザからどのようなコンテンツが流れてくるのか調べる為に、env.cgiで表示した環境変数の一番下に、そのコンテンツを表示させるようにした。
例えば、『二年次』をクリックし、 メッセージを書く所に『あ』と入力すると『Grade=B2&mes=%A4%A2&submit=%C1%F7%BF%AE』といったコンテンツが流れてくる。
これらは『&』を境に分別されている。そして、『あ』は『%A4%A2』に変換されている。 16進4桁で表示されているので一文字を六バイトで表して変換している。しかし、半角英数は1バイトで表している。
日本語の場合は%を用いてその後に上二桁、また%が挟まり、下二桁といった具合で表されているので、普通に表記した場合には2バイトで表現されているが、エンコードしたら全角1文字につき、%二個分のバイト数だけ余分に追加されてしまう。
PATH_INFOとQUERY_STRINGについて、 本来、env.cgiを実行してもPATH_INFOは空の状態だが、index.htmlからポストする際にはPATH_INFOを表示させる為にenv.cgi/env_index.htmlにポストするようになっている。
実際にenv_index.htmlは存在しないが、環境変数にはこれが入っている。
このようにして、PATH_INFOに情報を加えた。

また、QUERY_STRINGについては?以降の値が入るので、これも上と同じようにポストする際に?text=Test%20of%20Query_StringをURLの末尾に追加した。 REMOTE_HOSTについて、この部分が空白なのは、サーバ側の設定によってDNSの逆引きをしないようにしているからである。
具体的にどのように設定されているかと言うと、
/etc/httpd/conf/httpd.conf
で設定されていて、pw32のhttpd.confでは578行目に設定が書かれていた。
asdjflaskdfj
rootパスを知らないので実際に書き換えて参照する事はできなかったが、他の方法を使用して参照する事ができた。
IPアドレスをpack("C4", split(/\./, $addr));でバイナリ形式に変換し、
さらにバイナリ形式のIPをgethostbyaddr($addr,2);でホスト形式のアドレスに変換した。
それらもenv.cgiに記述し、確認した。
indexに戻る
課題4