GitHub

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入門等を参照してください。

source: Ruby%A4%C7CGI.hd
View on github | Report issue