#!/usr/bin/perl ;# ↑ ◎ Perl5のパスを指定。このパスはプロバイダに確認。 ;# ;# バナー広告総合管理 [アド・マネージメント] ver.3.03 (Share) ;# Copyright(C)1998-2000 I.Wada. All rights reserved. ;# #-----------------------------------------------------------------------------# # ここから初期設定です(サーバーへの設置方法は同梱の'readme.txt'をご覧下さい)# #-----------------------------------------------------------------------------# # # ●印の項目は必ず変更してください。 # ○印の項目はレイアウト、オプション機能関連です。基本的に変更不要です。 # ◎印の項目はサーバー環境によって変更する必要があります。(1行目も含みます) # # ・ ''内に記述しますが、'を入れたい場合は 中の'は \'にして下さい。 # ・ 行の頭に"#"を付けると、その行は実行時に無視されます。(コメントアウト) # ・ 詳しくは本サイトの解説/FAQ等を参照してください。 # # #-------- 特定機能の使用に関する設定 ------------------------------------------ # # ◎印はサーバー環境によっては正常に動作しない場合があります。 # その場合は、その機能を無効にしてください。 $TimeZone = 9; # ◎ タイムゾーン (GMTとの時差-海外時間で使用する場合のみ設定) $UseLock = 2; # ◎ ファイルロック(1:使う/2:使う/0:使わない) $Mailsend = 0; # ○ 広告リポートのメール送信 (1:する/0:しない) $CountStop = 2; # ○ 重複カウント防止法 (1:ページ単位/2:バナー単位/0:使わない) $ViewAddrMax = 10; # ○ 表示回数の重複カウント防止のためのIPアドレス保持数 $ClickAddrMax= 10; # ○ クリック回数の重複カウント防止のためのIPアドレス保持数 $JumpAddrMax = 10; # ○ 表示バナーとリンク先を一致するためのIPアドレス保持数 $CookieName = 'admgt'; # ○ クッキーの名前 $CookiePath = ''; # △ クッキーの有効な仮想パス(通常設定不要) #-------- パス/アドレス/ファイル名に関する設定 -------------------------------- # # スクリプトと同じディレクトリは、'./'です。1つ上は、'../'です。ここでの # 「パス」とはサーバー内での場所 '../xxxx'や '/home/foo/public_html/'を # 「アドレス」とはインターネット全体から見た場所 'http://〜'を指します。 require 'stdio.pl'; # ○ CGI標準入出力ライブラリ"stdio.pl"のパス $DataDir = 'data/'; # ○ データファイルがあるディレクトリのパス $ImageDir = 'data/'; # ○ バナー画像があるディレクトリのパス $GroupName = 'group.txt'; # △ グループファイルのファイル名 # ○ 表示バナーが無い場合に表示する画像のパス ("http://〜"では指定不可) $ClearImage = 'http://www.eibunpou.net/common_img/b_img/top/concan_468-60.gif'; # ○ リンク先が無い場合にリンクするURL ("http://"〜で指定する) $ClearPage = 'http://www.eibunpou.net/'; #-------- メールリポート機能に関する設定 -------------------------------------- # # 広告リポートを広告主に電子メールで送信する機能についての設定です。この # 機能を使わない場合は、以下は設定する必要はありません。外部コマンドとし # て、メール送信ライブラリ"Sendmail"が必要となります。 # ○ 日本語コード変換ライブラリ"jcode.pl"のパス require 'jcode.pl'; # ○ メール送信ライブラリ"sendmail"のパス $Sendmail = '/usr/sbin/sendmail'; # ○ 管理者メールアドレス $MasterEmail = 'mm@eyezmaze.com'; # ○ 管理者にも同報(CC)メール送信 (1:する/0:しない) $CorbonCopy = 1; # ○ メールのタイトル $Title = '広告掲載状況リポート'; # ○ メールのフッター (署名や特記事項等、下の行は削除しない) $MailFooter =<<'_END_OF_LINE_'; 過去の掲載状況及びアクセスした人の詳細なログは、専用ページに てご覧いただけます。また、広告バナー及びリンク先の変更も行う ことができます。 => http://www.eibunpou.net/eibunad/view.cgi 広告についてご不明な点がございましたら、メールでお問い合わせ 下さい。本メールに直接返信いただけます。 今後とも、どうぞ宜しくお願い申し上げます。 ----------------------------------------------------- サイトタイトル [サイトサブタイトル] http://www.ad.bar.ne.ad/~foo/hogehoge/ webmaster@ad.bar.ne.ad (担当:××) ----------------------------------------------------- _END_OF_LINE_ # 上の行は削除しない #/*--------------------------------------------------------------------------* # * * # * ・本スクリプトで初期設定が必要なのはここまでです。 * # * ・スクリプトを改造する場合は、perlやCGIなどのそれなりの知識が必要です。 * # * * # *--------------------------------------------------------------------------*/ #/*------------- 基本情報の設定/関数のコール --------------------------------*/ $SIG{'PIPE'} = $SIG{'INT'} = $SIG{'HUP'} = $SIG{'QUIT'} = $SIG{'TERM'} = "sigexit"; $Today = stdio::SetTime('yyyy/mm/dd (ww)',$TimeZone); %Form = stdio::QueryString(1,2,$jcode); $GroupFile = $DataDir . $GroupName; #/*--- 環境変数をセット ---*/ $HTTP_USER_AGENT = $ENV{'HTTP_USER_AGENT'}; $HTTP_USER_AGENT = substr($HTTP_USER_AGENT, 0, 100); $HTTP_USER_AGENT =~ s/[\r|\r\n|\n|\t|\b]//g; $HTTP_USER_AGENT =~ s/&/&/g; $HTTP_USER_AGENT =~ s/"/"/g; $HTTP_USER_AGENT =~ s//>/g; $REMOTE_HOST = $ENV{'REMOTE_HOST'}; $REMOTE_ADDR = $ENV{'REMOTE_ADDR'}; if ($REMOTE_HOST eq $REMOTE_ADDR || !$REMOTE_HOST) { $REMOTE_HOST = gethostbyaddr(pack('C4',split(/\./, $REMOTE_ADDR)),2) || $REMOTE_ADDR; $REMOTE_HOST = $REMOTE_ADDR if (!$REMOTE_HOST); } $HTTP_REFERER = $ENV{'HTTP_REFERER'}; $HTTP_REFERER =~ s/\+/ /g; $HTTP_REFERER =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; #/*--- 条件分岐 ---*/ if ($Form{'JP'}) { ClickViewCount(); } else { PageViewCount(); } #/*------------- 表示回数カウント -------------------------------------------*/ sub PageViewCount { if ($Form{'PG'}) { $JumpFile = $DataDir . $Form{'PG'} . '.jal' if ($Form{'GP'} || $CountStop == 1); } if ($JumpFile) { @JumpAddr = stdio::ReadFile($JumpFile); @JumpAddr = () if (!$JumpAddr[0]); } #/*--- 重複カウント防止策1 ---*/ if ($CountStop == 1 && $Form{'PG'}) { if ($JumpAddr[0]) { foreach (@JumpAddr) { $JumpAddr = $_; chomp($JumpAddr); ($UserName,$Field{'Url'},$Addr,$Agent) = split "\t", $JumpAddr; PrintBanner() if ($Addr eq $ENV{'REMOTE_ADDR'} && $Agent eq $HTTP_USER_AGENT); undef($Field{'Url'}); } } } #/*--- グループからランダム抽出 ---*/ if ($Form{'GP'} && $Form{'PG'}) { @FileRecord = stdio::ReadFile($GroupFile); foreach (@FileRecord) { ($User,$Group) = split "\t"; chomp($Group); foreach (split " ", $Group) { if ($Form{'GP'} eq $_) { if (!$Banner{$User}) { push(@Banner, $User); $Banner{$User} = 1; } } } } srand(time ^ ($$ + ($$ << 15)) || time); $UserName = $Banner[int(rand($#Banner+1))]; #/*--- 広告IDが指定されている場合 ---*/ } elsif ($Form{'ID'}) { $UserName = $Form{'ID'}; } #/*--- ユーザー名が取得できなかった場合 ---*/ if (!$UserName) { print "Content-type: image/gif\n\n"; stdio::FileOutput($ClearImage); exit(0); } #/*--- 重複カウント防止策2 ---*/ if ($CountStop == 2) { $ViewFile = $DataDir . $UserName . '.val'; @ViewAddr = stdio::ReadFile($ViewFile); if ($ViewAddr[0]) { foreach (@ViewAddr) { $ViewAddr = $_; chomp($ViewAddr); ($UserName,$Field{'Url'},$Addr,$Agent) = split "\t", $ViewAddr; PrintBanner() if ($Addr eq $ENV{'REMOTE_ADDR'} && $Agent eq $HTTP_USER_AGENT); undef($Field{'Url'}); } } else { @ViewAddr = (); } } $DataFile = $DataDir . $UserName . '.adm'; if (!stdio::LockCheck($DataFile,$UseLock)){ print "Content-type: image/gif\n\n"; stdio::FileOutput($ClearImage); exit(0); } @Record = stdio::ReadFile($DataFile); #/*--- ファイルオープンに失敗 ---*/ if (!$Record[0]) { print "Content-type: image/gif\n\n"; stdio::FileOutput($ClearImage); exit(0); } %Field = stdio::ReadData(split "\t", $Record[0]); #/*--- 掲載終了条件達成の判断 ---*/ if ($Field{'View'} + $Field{'Click'} + $Field{'Day'} == 0 && $Field{'Condition'} == 1) { $ConditionClear = 1; } elsif ($Field{'Condition'} == 2) { $Condition = 1; $Condition *= $Field{'View'} if ($Field{'View'} ne ""); $Condition *= $Field{'Click'} if ($Field{'Click'} ne ""); $Condition *= $Field{'Day'} if ($Field{'Day'} ne ""); $ConditionClear = 1 if ($Condition == 0); } #/*--- 掲載終了条件達成の場合 ---*/ if ($ConditionClear) { @FileRecord = stdio::ReadFile($GroupFile) if (!@FileRecord); if ($FileRecord[0]) { $i = 0; foreach (@FileRecord) { ($User,$Group) = split "\t"; chomp($Group); if ($UserName eq $User) { $find = 1; last; } $i ++; } if ($find) { splice(@FileRecord, $i, 1); if (open(FILE, ">$GroupFile")) { print FILE @FileRecord; close(FILE); } } } #/*--- 不要ファイルを削除 ---*/ unlink("$DataDir$Form{'User'}.cal") if (-e "$DataDir$UserName.cal"); unlink("$DataDir$Form{'User'}.val") if (-e "$DataDir$UserName.val"); print "Content-type: image/gif\n\n"; stdio::FileOutput($ClearImage); exit(0); } #/*--- 各種数値のカウント ---*/ $Field{'TotalView'} ++; $Field{'View'} -- if ($Field{'View'}); shift(@Record); ($Date,$View,$Click) = split "\t", $Record[0]; if ($Date eq $Today) { chomp($Click); $View ++; $Record[0] = $Date . "\t" . $View . "\t" . $Click . "\n"; } else { $Field{'PastDay'} ++; $Field{'Day'} -- if ($Field{'Day'}); unshift(@Record, "$Today\t1\t0\n"); $SendmailOK = 1 if ($Field{'Sendmail'} && $Mailsend); } #/*--- レコードに加える ---*/ unshift(@Record, 'Time' . "\b" . $Field{'Time'} . "\t" . 'Name' . "\b" . $Field{'Name'} . "\t" . 'Email' . "\b" . $Field{'Email'} . "\t" . 'Url' . "\b" . $Field{'Url'} . "\t" . 'Group' . "\b" . $Field{'Group'} . "\t" . 'Condition' . "\b" . $Field{'Condition'} . "\t" . 'SetView' . "\b" . $Field{'SetView'} . "\t" . 'SetClick' . "\b" . $Field{'SetClick'} . "\t" . 'SetDay' . "\b" . $Field{'SetDay'} . "\t" . 'View' . "\b" . $Field{'View'} . "\t" . 'Click' . "\b" . $Field{'Click'} . "\t" . 'Day' . "\b" . $Field{'Day'} . "\t" . 'TotalView' . "\b" . $Field{'TotalView'} . "\t" . 'TotalClick' . "\b" . $Field{'TotalClick'} . "\t" . 'TotalDay' . "\b" . $Field{'TotalDay'} . "\t" . 'PastDay' . "\b" . $Field{'PastDay'} . "\t" . 'Passwd' . "\b" . $Field{'Passwd'} . "\t" . 'Sendmail' . "\b" . $Field{'Sendmail'} . "\t" . 'Host' . "\b" . $Field{'Host'} . "\t" . 'Addr' . "\b" . $Field{'Addr'} . "\t" . 'Agent' . "\b" . $Field{'Agent'} . "\t" . "\n" ); if ($JumpFile) { unshift(@JumpAddr, $UserName . "\t" . $Field{'Url'} . "\t" . $ENV{'REMOTE_ADDR'} . "\t" . $HTTP_USER_AGENT . "\n"); splice(@JumpAddr, $JumpAddrMax); #/*--- ファイルのロック・書き換え ---*/ stdio::FileLock($JumpFile,$UseLock,@JumpAddr) if (stdio::LockCheck($JumpFile,$UseLock)); } #/*--- 重複カウント防止策2 ---*/ if ($CountStop == 2) { unshift(@ViewAddr, $UserName . "\t" . $Field{'Url'} . "\t" . $ENV{'REMOTE_ADDR'} . "\t" . $HTTP_USER_AGENT . "\n"); splice(@ViewAddr, $ViewAddrMax); stdio::FileLock($ViewFile,$UseLock,@ViewAddr) if (stdio::LockCheck($ViewFile,$UseLock)); } #/*--- ファイルのロック・書き換え ---*/ stdio::FileLock($DataFile,$UseLock,@Record) if (stdio::LockCheck($DataFile,$UseLock)); #/*--- リポートのメール送信 ---*/ SendMail() if ($SendmailOK); PrintBanner(); exit(0); } #/*------------- バナー画像表示処理 -----------------------------------------*/ sub PrintBanner { #/*--- 広告バナーを表示 (GIF) ---*/ if (-e "$ImageDir$UserName.gif") { $Field{'Url'} =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg; print "Content-type: image/gif\n"; stdio::SetCookie("$CookieName.$Form{'PG'}","UserName:$UserName&Url:$Field{'Url'}",undef,$TimeZone,undef,$CookiePath); print 'Content-Length: ' . (-s "$ImageDir$UserName.gif") . "\n"; print "\n"; stdio::FileOutput("$ImageDir$UserName.gif"); #/*--- 広告バナーを表示 (JPEG) ---*/ } elsif (-e "$ImageDir$UserName.jpg") { $Field{'Url'} =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg; print "Content-type: image/jpeg\n"; stdio::SetCookie("$CookieName.$Form{'PG'}","UserName:$UserName&Url:$Field{'Url'}",undef,$TimeZone,undef,$CookiePath); print 'Content-Length: ' . (-s "$ImageDir$UserName.jpg") . "\n"; print "\n"; stdio::FileOutput("$ImageDir$UserName.jpg"); #/*--- 広告バナーが存在しない ---*/ } else { $Field{'Url'} =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg; print "Content-type: image/gif\n"; stdio::SetCookie("$CookieName.$Form{'PG'}","UserName:$UserName&Url:$Field{'Url'}",undef,$TimeZone,undef,$CookiePath); print 'Content-Length: ' . (-s $ClearImage) . "\n"; print "\n"; stdio::FileOutput($ClearImage); } exit(0); } #/*------------- クリック回数カウント ---------------------------------------*/ sub ClickViewCount { #/*--- IDが指定されている場合 ---*/ if ($Form{'ID'}) { $UserName = $Form{'ID'}; #/*--- グループで指定されている場合 ---*/ } elsif ($Form{'PG'}) { $JumpFile = $DataDir . $Form{'PG'} . '.jal'; %Cookie = stdio::GetCookie("$CookieName.$Form{'PG'}"); #/*--- クッキーが取得できた場合 ---*/ if ($Cookie{'UserName'}) { $UserName = $Cookie{'UserName'}; #/*--- クッキーが取得できない場合 ---*/ } else { @JumpAddr = stdio::ReadFile($JumpFile); if ($JumpAddr[0]) { foreach (@JumpAddr) { ($UserName,$Field{'Url'},$Addr,$Agent) = split "\t"; chomp($Agent); last if ($Addr eq $ENV{'REMOTE_ADDR'} && $Agent eq $HTTP_USER_AGENT); undef($Field{'Url'}); undef($UserName); } } else { @JumpAddr = (); } } #/*--- ユーザー情報が取得できない場合 ---*/ if (!$UserName) { @JumpAddr = stdio::ReadFile($JumpFile) if (!@JumpAddr); if ($JumpAddr[0]) { foreach (@JumpAddr) { ($UserName,$Field{'Url'},$Addr,$Agent) = split "\t"; chomp($Agent); $Addr1 = "$1.$2.$3.*" if ($ENV{'REMOTE_ADDR'} =~ /^(\d*)\.(\d*)\.(\d*)\.\d*$/); $Addr2 = "$1.$2.$3.*" if ($Addr =~ /^(\d*)\.(\d*)\.(\d*)\.\d*$/); last if ($Addr1 eq $Addr2 && $Agent eq $HTTP_USER_AGENT); undef($Field{'Url'}); undef($UserName); } #/*--- それでもユーザー情報が取得できない ---*/ if (!$UserName) { foreach (@JumpAddr) { ($UserName,$Field{'Url'},$Addr,$Agent) = split "\t"; chomp($Agent); $Addr1 = "$1.$2.*.*" if ($ENV{'REMOTE_ADDR'} =~ /^(\d*)\.(\d*)\.\d*\.\d*$/); $Addr2 = "$1.$2.*.*" if ($Addr =~ /^(\d*)\.(\d*)\.\d*\.\d*$/); last if ($Addr1 eq $Addr2 && $Agent eq $HTTP_USER_AGENT); undef($Field{'Url'}); undef($UserName); } } } else { @JumpAddr = (); } } } #/*--- リンク先の取得が不可能の場合 ---*/ if (!$UserName) { print "Location: $ClearPage\n\n"; exit(0); } if ($CountStop == 1 && $Form{'PG'}) { $ClickFile = $DataDir . $Form{'PG'} . '.cal'; } elsif ($CountStop == 2) { $ClickFile = $DataDir . $UserName . '.cal'; } #/*--- 重複カウント防止策 ---*/ @ClickAddr = stdio::ReadFile($ClickFile) if ($ClickFile); if ($ClickAddr[0]) { foreach (@ClickAddr) { ($Url,$Addr,$Agent) = split "\t"; chomp($Agent); if ($Addr eq $ENV{'REMOTE_ADDR'} && $Agent eq $HTTP_USER_AGENT) { print "Location: $Url\n\n"; exit(0); } } } else { @ClickAddr = (); } $DataFile = $DataDir . $UserName . '.adm'; if (!stdio::LockCheck($DataFile,$UseLock)){ print "Location: $ClearPage\n\n"; exit(0); } @Record = stdio::ReadFile($DataFile); %Field = stdio::ReadData(split "\t", $Record[0]); #/*--- 掲載終了条件達成の判断 ---*/ if ($Field{'View'} + $Field{'Click'} + $Field{'Day'} == 0 && $Field{'Condition'} == 1) { $ConditionClear = 1; } elsif ($Field{'Condition'} == 2) { $Condition = 1; $Condition *= $Field{'View'} if ($Field{'View'} ne ""); $Condition *= $Field{'Click'} if ($Field{'Click'} ne ""); $Condition *= $Field{'Day'} if ($Field{'Day'} ne ""); $ConditionClear = 1 if ($Condition == 0); } #/*--- 掲載終了条件達成の場合 ---*/ if ($ConditionClear) { #/*--- 不要ファイルを削除 ---*/ unlink("$DataDir$Form{'User'}.cal") if (-e "$DataDir$UserName.cal"); unlink("$DataDir$Form{'User'}.val") if (-e "$DataDir$UserName.val"); print "Location: $ClearPage\n\n"; exit(0); } #/*--- 各種数値のカウント ---*/ $Field{'TotalClick'} ++; $Field{'Click'} -- if ($Field{'Click'}); shift(@Record); ($Date,$View,$Click) = split "\t", $Record[0]; if ($Date eq $Today) { chomp($Click); $Click ++; $Record[0] = $Date . "\t" . $View . "\t" . $Click . "\n"; } else { $Field{'PastDay'} ++; $Field{'Day'} -- if ($Field{'Day'}); unshift(@Record, "$Today\t0\t1\n"); $SendmailOK = 1 if ($Field{'Sendmail'} && $Mailsend); } #/*--- レコードに加える ---*/ unshift(@Record, 'Time' . "\b" . $Field{'Time'} . "\t" . 'Name' . "\b" . $Field{'Name'} . "\t" . 'Email' . "\b" . $Field{'Email'} . "\t" . 'Url' . "\b" . $Field{'Url'} . "\t" . 'Group' . "\b" . $Field{'Group'} . "\t" . 'Condition' . "\b" . $Field{'Condition'} . "\t" . 'SetView' . "\b" . $Field{'SetView'} . "\t" . 'SetClick' . "\b" . $Field{'SetClick'} . "\t" . 'SetDay' . "\b" . $Field{'SetDay'} . "\t" . 'View' . "\b" . $Field{'View'} . "\t" . 'Click' . "\b" . $Field{'Click'} . "\t" . 'Day' . "\b" . $Field{'Day'} . "\t" . 'TotalView' . "\b" . $Field{'TotalView'} . "\t" . 'TotalClick' . "\b" . $Field{'TotalClick'} . "\t" . 'TotalDay' . "\b" . $Field{'TotalDay'} . "\t" . 'PastDay' . "\b" . $Field{'PastDay'} . "\t" . 'Passwd' . "\b" . $Field{'Passwd'} . "\t" . 'Sendmail' . "\b" . $Field{'Sendmail'} . "\t" . 'Host' . "\b" . $Field{'Host'} . "\t" . 'Addr' . "\b" . $Field{'Addr'} . "\t" . 'Agent' . "\b" . $Field{'Agent'} . "\t" . "\n" ); unshift(@ClickAddr, $Field{'Url'} . "\t" . $ENV{'REMOTE_ADDR'} . "\t" . $HTTP_USER_AGENT . "\n"); splice(@ClickAddr, $ClickAddrMax); #/*--- ファイルのロック・書き換え ---*/ stdio::FileLock($DataFile,$UseLock,@Record) if (stdio::LockCheck($DataFile,$UseLock)); if ($ClickFile) { stdio::FileLock($ClickFile,$UseLock,@ClickAddr) if (stdio::LockCheck($ClickFile,$UseLock)); } #/*--- リポートのメール送信 ---*/ SendMail() if ($SendmailOK); #/*--- クリックログを取る ---*/ if (open(FILE, ">>$DataDir$UserName.clk")) { print FILE time . "\t" . $REMOTE_HOST . "\t" . $HTTP_USER_AGENT . "\t" . $HTTP_REFERER ."\n"; close(FILE); } print "Location: $Field{'Url'}\n\n"; exit(0); } #/*------------- メール送信処理 ---------------------------------------------*/ sub SendMail { #/*--- 終了条件の設定 ---*/ if ($Field{'Condition'} == 2) { $Condition = 'すべての条件を達成しますと掲載を終了いたします。'; } else { $Condition = 'いずれかの条件を達成しますと掲載を終了いたします。'; } #/*--- 各回数の設定 ---*/ if ($Field{'View'} ne "") { $Field{'View'} .= ' 回'; } else { $Field{'View'} = '未設定'; } if ($Field{'Click'} ne "") { $Field{'Click'} .= ' 回'; } else { $Field{'Click'} = '未設定'; } if ($Field{'Day'} ne "") { $Field{'Day'} .= ' 日'; } else { $Field{'Day'} = '未設定'; } chomp($Click); #/*--- クリックレートの掲載 ---*/ if ($View != 0) { $ClickRate = sprintf("%.1f",$Click/$View*100); } else { $ClickRate = ' 0.0'; } #/*--- 管理者へのCC設定 ---*/ $CorbonCopy = $MasterEmail if ($CorbonCopy); #/*--- 送信するメールの本文 ----*/ $Message =<<_END_OF_LINE_; $Field{'Name'} 様 当サイトに広告を出稿していただき、ありがとうございます。貴サ イトの昨日の広告の掲載情報のリポートいたします。 ■ 残り各保証数 ------------------------------ 残り表\示回数 $Field{'View'} 残りクリック回数 $Field{'Click'} 残り掲載日数 $Field{'Day'} ------------------------------ ※ $Condition ■ 昨日の掲載情報 ----------------------------- 表\示回数 $View 回 クリック回数 $Click 回 クリック率 $ClickRate % ----------------------------- ※ 広告掲載開始後、本日で$Field{'PastDay'}日経過しています。 $MailFooter _END_OF_LINE_ #/*--- 実際にメール送信する ---*/ stdio::SendMail($Sendmail,$Field{'Email'},$CorbonCopy,undef,$MasterEmail,undef,$Title,$Message); } #/*------------- エラー発生時の処理 -----------------------------------------*/ sub sigexit { if (-e $stdio::lockfile) { unlink($stdio::lockfile); } if (-e $stdio::tempfile) { unlink($stdio::tempfile); } exit(1); } sub debug { print "Content-type: text/plain\n\n"; print @_; exit; }