RubyでCGIスクリプトを作る下準備・Rubyからsendmailを使う
CGIスクリプトからメールを送信出来ると便利そうなので作る。
sendmailのオプションに-tを付けるとTo:、Cc:、Bcc:を解釈するようになる。
#!/usr/local/bin/ruby # # Rubyからsendmailを使うデモ # SENDMAIL = "/usr/libexec/sendmail/sendmail" # sendmailのパス def sendmail sm_from, sm_to, sm_cc, sm_bcc, sm_sub, sm_com require "kconv" sm_sub = sm_sub.tojis sm_com = sm_com.tojis IO.popen("#{SENDMAIL} -t", "r+") { |io| io.print "From: #{sm_from}\n" io.print "To: #{sm_to}\n" io.print "Cc: #{sm_cc}\n" if sm_cc != nil io.print "Bcc: #{sm_bcc}\n" if sm_bcc != nil io.print "Subject: #{sm_sub}\n" io.print "MIME-Version: 1.0\n" io.print "Content-Type: text/plain; charset=\"ISO-2022-JP\"\n" io.print "Content-Transfer-Encoding: 7bit\n" io.print "\n" io.print "#{sm_com}\n" } end # from@hoge:差出人、to@hoge:宛先 sendmail("from@hoge", "to@hoge", nil, nil, "テストメール", "テスト")
RubyでCGIスクリプトを作る下準備・cryptを使う
掲示板スクリプト等で使いそうなパスワード人証を作っておく。
saltはランダムで選ぶ仕様。
一般的なDESとMD5に対応。
参照)
Rubyリファレンスマニュアル -String- http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=String
#!/usr/local/bin/ruby # # Cryptテスト # def encrypt(pwd) salt = [rand(64), rand(64)].pack("C*").tr("\x00-\x3f", "A-Za-z0-9./") return pwd.crypt(salt) end def checkpwd(chk, pwd) if pwd =~ /^\$[0-9]\$([A-Za-z0-9\.\/]+)\$([A-Za-z0-9\.\/]+)$/ # MD5 salt = $1 else pwd =~ /^([A-Za-z0-9\.\/]{2})/ # MD5以外は一般的なDESとしてみる salt = $1 end if pwd == chk.crypt(salt) return true else return false end end pass = "hoge" pass = encrypt(pass) print pass + "\n" if checkpwd("hoge", pass) print "hoge\n" # 実行される end if checkpwd("hogehoge", pass) print "hogehoge\n" # 実行されない end
RubyでCGIスクリプトを作る下準備・ファイルの読み書き
典型的なファイルの読み書きのデモ。
多分、windowsではflockは使えない。
ftest.rb
#!/usr/local/bin/ruby # # ファイルの読み書きデモ # file1 = "ftest.rb" # このスクリプトのファイル名 file2 = "test.txt" # 書き込みテスト用の空ファイル lock = "YES" # YESならflockを使う ##### ファイルの各行を配列に割り当てて表示 print "■ファイルの各行を配列に割り当てて表示\n" File.open(file1) { |f| $lines = f.readlines } # 括弧が閉じれば自動的にファイルがクローズされる $lines.each { |l| print l } print "\n" ##### ファイルから一行ずつ読み込んで表示 print "■ファイルから一行ずつ読み込んで表示\n" File.open(file1) { |f| while f.gets print $_ end } print "\n" ##### ファイルから数字を読みとり1足して書き込む print "■ファイルから数字を読みとり1足して書き込む\n" File.open(file2, "r+") { |f| if (lock == "YES") f.flock(File::LOCK_SH) # ファイルが閉じれば自動的にロック解除 end count = f.read.to_i count = count + 1 f.pos = 0 # ファイルポインタを先頭にする f.print "#{count}" print "count = #{count}\n" }
FreeBSDメモ・スワップファイルの作り方
- カーネルコンフィギュレーションに「pseudo-device vn 1 # Vnode driver」を確認。
- スワップファイルを作成「# dd if=/dev/zero of=/usr/SWAPFILE bs=1024k count=10」(10kbの例)
- /etc/rc.confに「/usr/SWAPFILE」を記述。
- リブートしてスワップファイルを確認。「# swapinfo」
RubyでCGIスクリプトを作る下準備・アクセスカウンターもどきのCGI
GDライブラリを使ってPNG画像の表示。
#!/usr/local/bin/ruby # # アクセスカウンターもどき・デモ # # 0.png, 1.png ... 9.png を自分で用意する # require "GD" W = 8 # 0.png 〜 9.png の画像の幅 H = 16 # 0.png 〜 9.png の画像の高さ N = 3 # 表示する桁数 def printpng(count) im = GD::Image.new(W * N, H) count = count % (10 ** N) n = 0 sprintf("%0#{N}d", count).split("").each { |num| numimg = GD::Image.new_from_png(num + ".png") numimg.copy(im, W * n, 0, 0, 0, W, H) n = n + 1 } print "Content-Type: image/png\n\n" im.png STDOUT end cnt = rand(10000) printpng(cnt)