|
Cgi Aracılığı ile Formmail ve Sayaç Hazırlama
Bu bölümde örnek bir dosya grubu ile hatasız
bir şekilde çalışır sayaç ve formmail hazırlama amacı güdülmüştür.
Bu nedenle swf dosyasının hazırlanmasından bahsedilmeyecektir.
Özellikle sayaç hazırlamak tamamen profesyonel işdir ki bu konu
bizim amacımızı aşmaktadır.
Konulara geçmeden önce bu işlemin son derece
hassas bir işlem olduğunu bu nedenle anlatılan uygulamalarda yapılacak
en küçük bir hatanın çalışmayan bir sayaç veya mail olarak size
döneceğini unutmayın. Lütfen açıklamaları uygularken son derece
dikkatli olun.
FLASH İLE SAYAÇ HAZIRLAYALIM
Örnek çalışmayı anasayfada görebilirsiniz.
Kendi sayfamda da kullandığım bu tür bir çalışma
için elinizde 5 dosya bulunmalıdır.
1- Swf dosyası
2- Cgi dosyası
3- Log dosyası
4- Swf dosyasını içinde barındıran HTML dosyası
5- Fla dosyası
Cgi dosyası :
Kodlar aşağıdadır. Bu kodların tamamını kopyalayıp
bir txt dosyası açarak yapıştırın. Kaydettikten sonra dosya adını
shcounter.cgi olarak değiştirin. Burada hiçbir alanda
değişiklik yapmanıza gerek yoktur. Şu anda 1. dosyanız hazırlanmış
oldu.
#!/usr/bin/perl
# change the above line according to your perl script location
on your web server
#######################################################
# Seungho Choo http://tangible.new21.org
# GNU public license
#######################################################
# setting #################################################
$log_file = "./shcounter.log"; #the absolute path of
log_file (chmod 766)
$log_file_cookie = 'shfcount'; #name unique one
$expire_cookie = 90;
$use_lock = 1; #(1 if use file lock else 0)
# no need to change below this line##################################
if (!$ARGV[0]) {
if($ENV{'REQUEST_METHOD'} eq 'GET') {
$ARGV[0] = $ENV{'QUERY_STRING'};
} else {
read(STDIN, $ARGV[0], $ENV{'CONTENT_LENGTH'});
}
}
if ($ARGV[0]) {
%FORM;
&get_arg;
if ($FORM{'loaded'} eq 'true') {
&read_only; #the count will not be changed if once loaded
in flash movie.
}
}else{
&read_write; #add count number and send the count data to
flash movie.
}
exit(0);
sub read_only() {
open(FILE, "<$log_file");
$hit = <FILE>;
($hit_total,$hit_bugun,$hit_dun,$lastday) = split(/:/, $hit);
close(FILE);
print "Content-type: text/plain\n\n";
print "&total=$hit_total&bugun=$hit_bugun&dun=$hit_dun";
print "&eof=true&";
}
sub read_write(){
open(FILE, "+<$log_file");
if ($use_lock) {flock(FILE, 2);}
seek(FILE, 0, 0);
$hit = <FILE>;
($hit_total,$hit_bugun,$hit_dun,$lastday) = split(/:/, $hit);
$hit_total++;
$hit_bugun++;
$hit_siz = &get_cookie + 1;
#####The year, month, day of yesterday and today;
($sec, $min, $hour, $day, $mon, $year) = localtime(time);
$mon++;
$year += 1900;
$bugun = "$year-$mon-$day\n";
($sec, $min, $hour, $day, $mon, $year) = localtime(time-24*60*60);
$mon++;
$year += 1900;
$dun = "$year-$mon-$day\n";
##### check if the date has changed ( dun and bugun)
# following lines will be executed at the first access on the
day
if ($bugun ne $lastday) {
if ($dun ne $lastday) {
$hit_dun = 0; #for the first day of counting
} else {
$hit_dun = $hit_bugun;
}
$hit_bugun = 1;
$lastday = $bugun;
}
seek(FILE, 0, 0);
print FILE "$hit_total:$hit_bugun:$hit_dun:$lastday\n";
if ($use_lock) { flock(FILE, 8);}
close(FILE);
#####print HTTP header
print "Content-type: text/plain\n";
&format_cookiedate;
print "Set-Cookie: $log_file_cookie=$hit_siz; expires=$cookiedate;
\n";
print "\n";
#####print count data
print "&total=$hit_total&bugun=$hit_bugun&dun=$hit_dun&siz=$hit_siz";
# send data
print "&eof=true&"; #the end of data
}
#formate cookie date
sub format_cookiedate {
($sec, $min, $hour, $day, $mon, $year, $dow ) = localtime(time
+ $expire_cookie*60*60*24);
(@month) = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
(@week) = qw(Sun Mon Tue Wed Thu Fri Sat);
$cookiedate = sprintf("%s, %d-%s-%04d %02d:%02d:%02d GMT",
$week[$dow],$day,$month[$mon+1],$year+1900,$hour,$min,$sec);
}
# get cookie
sub get_cookie {
@pairs = split(/; /, $ENV{'HTTP_COOKIE'});
foreach $pair (@pairs) {
($key, $value) = split(/=/, $pair);
if ($key eq $log_file_cookie) {
return $value;
}
}
return '';
}
#parse argument
sub get_arg {
@pairs = split(/&/, $ARGV[0]);
foreach $pair (@pairs) {
($key, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/<!--(.|\n)*-->//g;
$FORM{$key} = $value;
}
}
Log dosyası :
Yine bir txt dosyası açın ve alttaki rakamları
kopyalayıp yapıştırın. Dosya adını shcounter.log
olarak değiştirin. 2. dosyanızda hazırdır.
4547:52:64:2002-8-16
-24
Yukardaki kodları açıklayalım. 4547 rakamı total
ziyaretçi sayısını, 52 bugun, 64 dün ziyaret edenlerin sayısını
ifade eder.Diğer kısımlar tarih ile ilgilidir. Otomatik ayarlanır.
İsterseniz tarih kısmını elle düzeltebilirsiniz.Total,dün ve bugün
kısımlarını da düzenleme şansınız vardır. Server`a gönderildikten
sonra işlemler verilen rakamlardan itibaren başlatılır.
Swf ve Fla dosyası :
Alttaki linkten fla dosyasını indirin.
Fla dosyasını indirin
Burada değişiklik yapacağınız tek alan vardır.
Fla dosyasını açın, sahnedeki klibi tek tıklama ile seçip actionscript
panelini açın. Orada göreceğiniz (6.dizinde): "/cgi-bin/shcounter.cgi"
alanına kendi server`ınızın adresini yazın. En fazla hata burada
yapılmaktadır. /cgi-bin kısmı cgi ve log dosyalarını server da
bulunacağı alanı göstermektedir.Dizini tam bilmiyorsanız firmanızın
web sayfasından araştırınız. " " işaretlerini silmemeye
ve dizin sonundaki cgi dosyasının adını değiştirmemeye dikkat
ediniz.Swf dosyasını fla.dan elde edin. Lütfen adını değiştirmeyin.
Şayet değiştirmek isterseniz alttaki html alanı için vereceğim
kodlardaki ismide düzenlemeniz gerekecektir. 3 ve 4. dosyalarda
hazır.
HTML dosyası :
Bu dosya sayacı kullanacağınız html dosyasıdır.
Önce siz bir web editörü ile sayacı kullanacağınız alana yerleştirin.
Sonra dosyanızı kaydedin. <Object>......</Object>
alanını seçip silin ve alttaki kodları kopyalayıp yapıştırın.
<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/ pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0"
WIDTH=130 HEIGHT=35>
<PARAM NAME=movie VALUE=shcounter.swf?interval=15000&cgilocation=/cgi-bin/shcounter.cgi"">
<PARAM NAME=quality VALUE=high>
<PARAM NAME=bgcolor VALUE=#FFFFFF>
<EMBED src=shcounter.swf?interval=15000&cgilocation=/cgi-bin/shcounter.cgi""
quality=high
bgcolor=#FFFFFF
WIDTH=130 HEIGHT=35
TYPE="application/x-shockwave-flash"
PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash">
</EMBED>
</OBJECT>
Bu bölümü aslında yapmak gerekmeyebilir. Fakat
olası problemlere karşı dikkatli davranmakta yarar vardır. Şu
anda elimizde 5 dosya da hazır. Şimdi bunları server`a gönderme
ve orada düzenleme işlerini anlatalım.
Dosyaları server`a gönderme:
Burada dikkatli olun . Cgi ve log dosyasını genelde
server`larda bulunan cgi-bin klasörü içine (bu konuda yine firmanıza
danışabilirsiniz) ve mutlaka ASCII modunda göndermelisiniz.
Sık yapılan ikinci hata burada oluşmaktadır. Diğer dosyaları(swf
ve html dosyası) auto modunda istediğiniz alana gönderebilirsiniz.
Server`da yapılacak işlemler:
Yapılan üçüncü hata bu bölümde oluşmaktadır.
Chmod ayarlamaları hatalı olursa sayaç çalışmayacaktır.
Log dosyası---> Chmod 766
Cgi dosyası---> Chmod 755 olmalıdır.
Bu işlemler hatasız uygulanmışsa sayaç problemsiz
çalışacaktır.
UYARI: Bu dosya sadece unix
destekli serverlarda çalışmaktadır
FLASH İLE FORMMAİL
HAZIRLAMA-->
|