ページビューカウンター
はじめに
クッキーを利用したページビューカウンターです。
1つのページにつき1回だけカウントされます。
counter.cgi
#!/usr/bin/ruby -Ke
require "cgi"
require "gifcat"
cgi = CGI.new
count = 0
cookies = []
if !cgi.referer || cgi.cookies["pages"].include?( cgi.referer.to_s )
File.open( "counter.txt" ) do |file|
count = file.read.chomp.to_i
end
else
cgi.cookies["pages"].push cgi.referer
cookies.push CGI::Cookie.new( "name" => "pages", "value" => cgi.cookies["pages"], "path" => "/" )
File.open( "counter.txt", "r+" ) do |file|
file.flock( File::LOCK_EX )
count = file.read.chomp.to_i + 1
file.rewind
file.truncate( 0 )
file.write count.to_s
end
end
count = count.to_s
count = "0" * ( 7 - count.size ) + count
count = "l" + count + "r"
gif = GIFCat.new
gif.read_files( *count.split( "" ).collect{ |n| "image/#{n}.gif" } )
print "Pragma: no-cache\n"
print "Cache-Control: no-cache\n"
print "Expires: Thu, 01 Dec 1994 16:00:00 GMT\n"
cgi.out( {"type" => "image/gif", "cookie" => cookies} ) do
gif.to_gif
end
require "cgi"
require "gifcat"
cgi = CGI.new
count = 0
cookies = []
if !cgi.referer || cgi.cookies["pages"].include?( cgi.referer.to_s )
File.open( "counter.txt" ) do |file|
count = file.read.chomp.to_i
end
else
cgi.cookies["pages"].push cgi.referer
cookies.push CGI::Cookie.new( "name" => "pages", "value" => cgi.cookies["pages"], "path" => "/" )
File.open( "counter.txt", "r+" ) do |file|
file.flock( File::LOCK_EX )
count = file.read.chomp.to_i + 1
file.rewind
file.truncate( 0 )
file.write count.to_s
end
end
count = count.to_s
count = "0" * ( 7 - count.size ) + count
count = "l" + count + "r"
gif = GIFCat.new
gif.read_files( *count.split( "" ).collect{ |n| "image/#{n}.gif" } )
print "Pragma: no-cache\n"
print "Cache-Control: no-cache\n"
print "Expires: Thu, 01 Dec 1994 16:00:00 GMT\n"
cgi.out( {"type" => "image/gif", "cookie" => cookies} ) do
gif.to_gif
end