RubyでCGI
rubyでCGIを書いてみよう!という話。
一応、ruby1.8.xを前提にしています。
導入
- test.cgiという名前で、以下のようなファイルを用意
#!/usr/bin/env ruby print "Content-type: text/html\n" print "\n" print "<html>" print "これは<b>CGI</b>のテストです。" print "</html>"
- 実行権限を付ける(chmod 755 test.cgi)
- (環境によっては) .htaccessを用意
AddHandler cgi-script .cgi
- http://..../test.cgi にアクセス(文字コードによっては文字化けすると思うので、metaタグを入れる(<meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> 等)か、ブラウザで適宜切りかえてやってください。)
文の量が多いときは
ヒアドキュメントを使うと便利です。
print <<EOD Content-type: text/html <html> これは<b>CGI</b>のテストです。 </html> EOD
(EODはEnd Of Dataの略ですが、別にEOSでもHOGEでも何でも構いません)
「EOD」の代わりに「-EOD」とすることで、
def output print <<-EOD Content-type: text/html <html> これは<b>CGI</b>のテストです。 </html> EOD end
のように、終端の「EOD」をインデントすることができる。
さらに文が多いときは
ERBを使いましょう。
require 'erb' puts ERB.new(File.read("hoge.rhtml")).result(binding)
添付ライブラリのcgi.rbを使う
require "cgi" cgi = CGI.new cgi.out do "<html>テスト2</html>" end
値を受け取る(HTTP GET)
http://..../test.cgi?foo=1&bar=2&baz=quux
というURLにアクセスすると、
require "cgi" cgi = CGI.new p cgi["foo"] # => "1" p cgi["bar"] # => "2" p cgi["baz"] # => "quux"
となる。
値を受け取る(HTTP POST)
- 以下のようなtest.htmlを用意する
<html> <form action="test.cgi" mehtod="POST"> <input type="text" name="foo" value="なにか書いてください"> <input type="submit" value="送信"> </form> </html>
- test.htmlにアクセスして、送信ボタンを押と、test.cgiが実行され、
require "cgi" cgi = CGI.new p cgi["foo"] # => 入力された文字列
となる。
テキストボックス以外のものについてはとほほのWWW入門等を参照してください。
View on github | Report issue