#!/usr/bin/env ruby # coding: utf-8 Encoding.default_external = 'utf-8' require'kconv' require'cgi' require'open3' require'sqlite3' require'timeout' def ptag(name) puts"<p>#{name}</p>" end begin Timeout.timeout(0.5){ c = CGI.new(:accept_charset => "UTF-8") print"Content-type: text/html; charset=utf-8\n\n" SQLite3::Database.new("../data/ranking.db") do |db| db.results_as_hash = true coderead = c["example"] if /system|exec|open/ =~ coderead file = File.open("escape.txt", "r") puts file.read file.close exit end namae = c["name"] ans = c["ans"].delete("\r") newans = ans.strip cmd = "ruby -Ku -e '#{coderead}'" o,$e,s = Open3.capture3(cmd) #o,$e,s = 実行結果、エラー文、プロセス? newo = o.strip print <<EOF <DOCTYPE html> <head> <meta charset=utf-8> <title>テキストエディタ読み込み</title> <link rel="stylesheet" type="text/css" href="editor.css"> <style> <!-- --> </style> </head> <body> EOF puts("<h1>入力したコード</h1>") printf("<textarea name=\"example\" readonly=\"readonly\">%s</textarea>\n", coderead) puts("<h1>実行結果</h1>") puts("<div id=\"result\">") printf("<pre>%s</pre>\n", CGI.escapeHTML(o)) puts("</div>") if newans == newo #一致したときにDBにかきこむ puts("<h2>おめでとう!!成功です!!</h2>") if namae == "" ptag("名前が入力されていません!名前を入力して下さい。") else #db.execute("insert into ranking (id, name) values (?, ?)",coderead , namae) #puts("<h3>ランキングに書き込みました!</h3>") end if $e == "" puts("<h2>エラー文</h2>") printf("<p>%s</p>\n", $e) end else puts("<h3>もう一度やってみよう...!!</h3>") end end puts("<a href=\"./editor.rb\">エディタ画面へ戻る</a>") puts("</body>\n</html>") } rescue Timeout::Error file = File.open("errormes.txt", "r") puts file.read file.close end