Ruby 初心者スレッド Part 30
■ このスレッドは過去ログ倉庫に格納されています
0096デフォルトの名無しさん
2009/08/12(水) 12:25:18ttp://www.skuare.net/2007/06/ruby_1.html
CGI の入力・出力構造は基本的に通常のスクリプトと変わらない
ブラウザからのデータをサーバが解釈した環境変数 QUERY_STRING の中身が標準入力に既に入っていて
標準出力を行うとユーザーに送る HTML などのデータとみなされてサーバが一旦受け取るという違いしかない
ただ、環境変数 QUERY_STRING を直接アクセスすることは今となってはまず無い
たいていは適度に使いやすく変換してくれる肩代わりライブラリ、Ruby では標準添付の cgi 、を使う
Web ブラウザは、HTML 上の送信ボタンが押されたときには、そのボタンを含む FORM 要素の
INPUT 要素や TEXTAREA 要素の name 属性と value 属性をペアにしてまとめ、適当にエンコードしてサーバに送る
上記サイトでは HTML 上で value が省略されているが、普通にユーザーが入力すればその値が value としてサーバに送られる
そして、サーバが受け取ったデータというのは通常
name1=値1&name2=値2…
というようなひと連なりのテキストというか英数字記号の巨大な塊となっている
これをいちいち安全かつ適切に自力分解復元するのは面倒だし不安なので、 cgi ライブラリにその仕事をやってもらう
CGI.new とすると QUERY_STRING が読み込まれ、わかりやすく分解されて、[ ] メソッドで参照できるようになる
たとえば HTML 上で name1 だった入力欄の値を利用したい場合は
cgi = CGI.new
cgi['name1']
とすればよい
なお、標準出力はサーバが全て受け取るので、何かをユーザー向けに表示させたい場合は、
本来 Web サーバが行っていたことも全て自力でする必要がある(CGI はそういうふうになっている)
HTML を表示したいのなら、 サーバが自動で行っていた Content-Type という HTTP ヘッダ等の表示も自前で行わなければならない
print "Content-type: text/html\n\n"
CGI#out のブロックで括るとこれを自動で行ってくれるのだが、まあそれは別の話
■ このスレッドは過去ログ倉庫に格納されています