■
cgi.rbを使わずにやってみました。
http://apollorec.main.jp/ruby/
ソースコード全部は、上に置いてます。
class Kent #------------------------------------------------- # フォームデコード #------------------------------------------------- def initialize buf = "" @form = Hash.new if ENV['REQUEST_METHOD'] == "POST" if ENV['CONTENT_LENGTH'].to_i < 51200 buf = $stdin.read(ENV['CONTENT_LENGTH'].to_i) end else buf = ENV['QUERY_STRING'] end buf.split(/&/).each {|l| (key,val) = l.split(/=/) val = "" unless val key = key.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/n) do [$1.delete('%')].pack('H*') end val = val.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/n) do [$1.delete('%')].pack('H*') end val.gsub!('&', '&') val.gsub!('"', '"') val.gsub!('>', '>') val.gsub!('<', '<') val.gsub!("\r\n",'<br>') val.gsub!("\r",'<br>') val.gsub!("\n",'<br>') if @form[key] @form[key] = @form[key] + "\0" + val else @form[key] = val end } end def [](key) @form[key].to_s end #------------------------------------------------- # クッキー発行 #------------------------------------------------- def set_cookie(str, name = 'KENT') t = Time.now + 60*24*60*60 gmt = t.strftime("%a, %d-%b-%Y %H:%M:%S GMT") str = str.gsub(/([^ a-zA-Z0-9_.-]+)/n) do '%' + $1.unpack('H2' * $1.size).join('%').upcase end.tr(' ', '+') print "Set-Cookie: #{name}=#{str}; expires=#{gmt}\n"; end #------------------------------------------------- # クッキー取得 #------------------------------------------------- def get_cookie(name = 'KENT') str = ENV['HTTP_COOKIE'] || '' cook = Hash.new("") str.split(/;/).each {|l| (key,val) = l.split(/=/) key.gsub!(/\s/,'') cook[key] = val } cook[name].tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/n) do [$1.delete('%')].pack('H*') end end #------------------------------------------------- # ファイルロック #------------------------------------------------- def lock(lock_dir) lock_flag = false 3.times{ begin Dir.mkdir(lock_dir) lock_flag = true break rescue d = File::stat(lock_dir) Dir.rmdir(lock_dir) if d.mtime.to_i < Time.now.to_i - 60 sleep 1 end } return lock_flag end #------------------------------------------------- # アンロック #------------------------------------------------- def unlock(lock_dir) begin Dir.rmdir(lock_dir) lock_flg = true rescue lock_flag = false end return lock_flag end end
cgi.rb使った方がいいんですか。
htmlエスケープも一度にできるし、クッキーも使いやすいので、
これはこれで自分が使う範囲では使いやすいので、
これはこれという事で。。。
ロックも複数ファイルを更新する時とかいるかなと思うんですけど
そして、kentやるならYYbbsをと思ってソース見たら、
更に、ややこしやー、でした。
昔はもっとシンプルだったと思うんだけどなー。