#!/usr/bin/perl ;# ↑ ◎ Perl5のパスを指定。このパスはプロバイダに確認。 ;# ;# バナー広告総合管理 [アド・マネージメント] ver.3.03 (Share) ;# Copyright(C)1998-2000 I.Wada. All rights reserved. ;# #-----------------------------------------------------------------------------# # ここから初期設定です(サーバーへの設置方法は同梱の'readme.txt'をご覧下さい)# #-----------------------------------------------------------------------------# # # ●印の項目は必ず変更してください。 # ○印の項目はレイアウト、オプション機能関連です。基本的に変更不要です。 # ◎印の項目はサーバー環境によって変更する必要があります。(1行目も含みます) # # ・ ''内に記述しますが、'を入れたい場合は 中の'は \'にして下さい。 # ・ 行の頭に"#"を付けると、その行は実行時に無視されます。(コメントアウト) # ・ 詳しくは本サイトの解説/FAQ等を参照してください。 # # $Lcode = ''; # シェアウェアレジストコード #-------- 特定機能の使用に関する設定 ------------------------------------------ # # ◎印はサーバー環境によっては正常に動作しない場合があります。 # その場合は、その機能を無効にしてください。 $MasterKey = 'mri'; # ● マスターキー(10文字以内の半角英数字) $TimeZone = 9; # ◎ タイムゾーン (GMTとの時差-海外時間で使用する場合のみ設定) $UseLock = 2; # ◎ ファイルロック(1:使う/2:使う/0:使わない) $Mailsend = 0; # ○ 広告リポートのメール送信 (1:する/0:しない) $jcode = 'sjis'; # ○ 日本語変換コード('sjis','jis','euc'のいずれか) $GraphTimes = 5; # ○ グラフの倍率 (**×表示|クリック回数) $MaxSize = 15000; # ○ アップロード可能な画像サイズ上限 $CookieName = 'admgt'; # ○ クッキーの名前 $CookiePath = ''; # ○ クッキーの有効な仮想パス(通常設定不要) $CookieExpires = 60; # ○ クッキーの有効日数 (パスワードを保存する日数) #-------- パス/アドレス/ファイル名に関する設定 -------------------------------- # # スクリプトと同じディレクトリは、'./'です。1つ上は、'../'です。ここでの # 「パス」とはサーバー内での場所 '../xxxx'や '/home/foo/public_html/'を # 「アドレス」とはインターネット全体から見た場所 'http://〜'を指します。 require 'stdio.pl'; # ○ CGI標準入出力ライブラリ"stdio.pl"のパス require 'jcode.pl'; # ○ 文字コード変換ライブラリ"jcode.pl"のパス $DataDir = 'data/'; # ○ データファイルがあるディレクトリのパス $ImageDir = 'data/'; # ○ バナー画像があるディレクトリのパス $GroupName = 'group.txt'; # ○ グループファイルのファイル名 #-------- デザイン等に関する設定(基本的に変更不要) ---------------------------- # # 基本的に変更不要ですが、背景色やメッセージ等をサンプルとは変更したい場 # 合は変更してください。(一部の項目ではHTMLに関する知識が必要です) $Title = 'アドマネージャー'; # ○ タイトル(などで表示) $BgColor1 = 'DDFFDD'; # ○ テーブルの背景配色1 $BgColor2 = 'FFFFE1'; # ○ テーブルの背景配色2 $BgColor3 = 'DDFFFF'; # ○ テーブルの背景配色3 # ↓ ○ <body>タグの設定(<>や'body'は不要です) $body = 'text="#000000" bgcolor="#FFEEDD"'; # ↓ ○ 日付の表記方法(設定方法は同梱の "readme.txt" を参照のこと) $TimeFormat = 'yyyy/mm/dd (ww) hh:nn'; $Header = <<'_END_OF_HTML_'; <!-- ↓ ○ ヘッダー部に表示する文字列(HTML使用可能)--> <!-- ↑ ここまで --> _END_OF_HTML_ $Footer = <<'_END_OF_HTML_'; <!-- ↓ ○ フッター部に表示する文字列(HTML使用可能)-->   <!-- ↑ ここまで --> _END_OF_HTML_ #/*--------------------------------------------------------------------------* # * * # * ・本スクリプトで初期設定が必要なのはここまでです。 * # * ・スクリプトを改造する場合は、perlやCGIなどのそれなりの知識が必要です。 * # * * # *--------------------------------------------------------------------------*/ #/*------------- 基本情報の設定/関数のコール --------------------------------*/ $SIG{'PIPE'} = $SIG{'INT'} = $SIG{'HUP'} = $SIG{'QUIT'} = $SIG{'TERM'} = "sigexit"; if ($jcode eq 'euc') { $fcode = '; charset=euc-jp'; } elsif ($jcode eq 'sjis') { $fcode = '; charset=Shift-jis'; } elsif ($jcode eq 'jis') { $fcode = '; charset=iso-2022-jp'; } $Version = 'AdvertisementManager/3.00'; $Script = $1 if ($ENV{'SCRIPT_NAME'} =~ /([^\\\/]+$)/); if ($ENV{'QUERY_STRING'} eq 'UPLOAD') { %Form = stdio::GetFile(1,2,$jcode); } else { %Form = stdio::QueryString(1,2,$jcode); } $GroupFile = $DataDir . $GroupName; $DataFile = $DataDir . $Form{'User'} . '.adm'; $ClickFile = $DataDir . $Form{'User'} . '.clk'; #/*--- 環境変数をセット ---*/ $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; $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); } #/*--- ユーザー認証/条件分岐 ---*/ if ($Form{'clear'}) { stdio::SetCookie($CookieName,-1,-1,undef,$CookiePath); } elsif ($Form{'mode'} && $Form{'mode'} ne ' 終了 ') { if (!$Form{'User'} && $Form{'mode'} ne 'ChangeRegist' && $Form{'mode'} ne 'NewRegist') { Errors('フォーム入力ミス','ユーザー名を入力して下さい。'); } elsif (!$Form{'passwd'}) { Errors('フォーム入力ミス','パスワードを入力して下さい。'); } #/*--- マスターキーと一致 ---*/ if ($Form{'passwd'} eq $MasterKey) { stdio::SetCookie($CookieName,"User:$Form{'User'}&passwd:$Form{'passwd'}",$CookieExpires,undef,$CookiePath) if ($Form{'Cookie'}); $user = 'manager'; if ($Form{'mode'} eq 'NewForm') { $Form{'User'} = 'new'; } elsif ($Form{'mode'} eq 'List') { $Form{'User'} = 'all'; } if ($Form{'User'} eq 'new') { $Form{'mode'} = 'NewForm'; RegistForm(); } elsif ($Form{'User'} eq 'all') { $Form{'mode'} = 'List'; PrintList(); } else { if ($Form{'mode'} eq 'NewForm') { RegistForm(); } elsif ($Form{'mode'} eq 'NewRegist') { RegistFile(); } elsif ($Form{'mode'} eq 'List') { PrintList(); } else { Errors('システムエラー','入力されたIDのデータファイルが存在しません。') unless (-e $DataFile); @Record = stdio::ReadFile($DataFile); %Field = stdio::ReadData(split "\t", $Record[0]); $Form{'mode'} = 'ChangeForm' if ($Form{'mode'} eq '変更'); if ($Form{'mode'} eq 'ChangeForm') { RegistForm(); } elsif ($Form{'mode'} eq 'ChangeRegist') { RegistFile(); } elsif ($Form{'mode'} eq 'Delete' || $Form{'mode'} eq '削除') { Delete(); PrintList(); } } } } else { Errors('システムエラー','入力されたIDのデータファイルが存在しません。') unless (-e $DataFile); @Record = stdio::ReadFile($DataFile); %Field = stdio::ReadData(split "\t", $Record[0]); Errors('フォーム入力ミス','パスワードが不正です。') if (!stdio::RecryptString($Form{'passwd'},$Field{'Passwd'})); stdio::SetCookie($CookieName,"User:$Form{'User'}&passwd:$Form{'passwd'}",$CookieExpires,undef,$CookiePath) if ($Form{'Cookie'}); $user = 'sponsor'; } #/*--- 条件分岐 ---*/ if ($Form{'mode'} eq 'Upload') { BannerUpload(); } elsif ($Form{'mode'} eq 'AccessView') { AccessView(); } elsif ($Form{'mode'} eq 'AccessReport') { AccessReport(); } elsif ($Form{'mode'} eq 'CsvOutput') { CsvOutput(); } elsif ($Form{'mode'} eq 'BannerUpload') { BannerUpload(); } elsif ($Form{'mode'} eq 'SendMailOn' || $Form{'mode'} eq 'SendMailOff') { SendMailSwitch(); } elsif ($Form{'mode'} eq 'noselect') { Errors('フォーム入力ミス','コマンドを選択して下さい。'); } MainPage(); exit(0); } #/*------------- ログインページ ---------------------------------------------*/ if (!$Form{'clear'}) { %Cookie = stdio::GetCookie($CookieName); $checked = ' checked' if ($Cookie{'User'}); } print 'Content-type: text/html' . $fcode . "\n\n"; print <<_END_OF_HTML_; <html> <head> <title>$Title $Header ログイン
 広告ID 
 パスワード 
広告IDとパスワードを保存

$Footer _END_OF_HTML_ exit(0); #/*------------- メインページ -----------------------------------------------*/ sub MainPage { #/*--- バナー画像のチェック ---*/ if (-e "$ImageDir$Form{'User'}.gif") { $Banner = qq|| . (-s |; } elsif (-e "$ImageDir$Form{'User'}.jpg") { $Banner = qq|| . (-s |; } else { $Banner = qq|(バナー未登録)|; } $TimeNow = stdio::SetTime($TimeFormat,$TimeZone); 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'} = '未設定'; } if ($Field{'SetView'} ne "") { $Field{'SetView'} .= '回'; } else { $Field{'SetView'} = '未設定'; } if ($Field{'SetClick'} ne "") { $Field{'SetClick'} .= '回'; } else { $Field{'SetClick'} = '未設定'; } if ($Field{'SetDay'} ne "") { $Field{'SetDay'} .= '日'; } else { $Field{'SetDay'} = '未設定'; } if ($Field{'TotalView'} != 0) { $ClickRate = sprintf("%.1f",$Field{'TotalClick'}/$Field{'TotalView'}*100); } else { $ClickRate = 0; } if ($Field{'PastDay'} != 0) { $AverageView = sprintf("%.1f",$Field{'TotalView'}/$Field{'PastDay'}); $AverageClick = sprintf("%.1f",$Field{'TotalClick'}/$Field{'PastDay'}); } else { $AverageView = $Field{'TotalView'}; $AverageClick = $Field{'TotalClick'}; } if ($AverageView != 0) { $AverageClickRate = sprintf("%.1f",$AverageClick/$AverageView*100); } else { $AverageClickRate = 0; } #/*--- 終了条件の表示 ---*/ if ($Field{'Condition'} == 1) { $Condition = '上記の全ての条件を達成しますと、バナーの掲載を終了いたします。'; } else { $Condition = '上記の何れかの条件を達成しますと、バナーの掲載を終了いたします。'; } #/*--- HTML表示開始 ---*/ print 'Content-type: text/html' . $fcode . "\n\n"; print <<_END_OF_HTML_; $Title [$Form{'User'}:広告掲載情報] $Header バナー広告掲載状況
$Field{'Name'} 様 (ID $Form{'User'})

 

広告の情報

現在登録されているバナー
$Banner

現在登録されているリンク先
$Field{'Url'}

リンク先変更

バナー変更(最大$MaxSizeバイト)

 

現在の掲載状況 $TimeNow
  累計 日平均
残り保証表\示回数    $Field{'View'}($Field{'SetView'}) 表\示回数    $Field{'TotalView'}回   $AverageView回
残り保証クリック回数    $Field{'Click'}($Field{'SetClick'})  クリック回数    $Field{'TotalClick'}回   $AverageClick回
残り保証掲載日数    $Field{'Day'}($Field{'SetDay'})  クリック率    $ClickRate%   $AverageClickRate%

$Condition括弧内は初期設定値です。

_END_OF_HTML_ shift(@Record); if (@Record) { print qq|

 

\n|; print qq|日付別掲載状況\n|; print qq|
 \n|; print qq|\n|; print qq| \n|; print qq| \n|; print qq| \n|; print qq| \n|; print qq| \n|; print qq| \n|; print qq| \n|; foreach (@Record) { chomp; ($Date,$View,$Click) = split "\t"; if ($View != 0) { $ClickRate = sprintf("%.1f",$Click/$View*100); } else { $ClickRate = 0; } $GraphWidth = sprintf("%d",$View*$GraphTimes); $GraphWidth = 1 if (!$GraphWidth); print qq| \n|; print qq| $ccc $Date\n|; print qq| \n|; print qq| \n|; print qq| \n|; print qq| \n|; print qq| \n|; } print qq|
日付表\示回数クリック回数クリック率グラフ
$View回$Click回$ClickRate%
\n|; } print qq|

 

\n|; SelectMenu($Form{'mode'}); print $Footer; print qq|\n|; print qq|\n|; exit(0); } #/*------------- 登録広告一覧表示 -------------------------------------------*/ sub PrintList { opendir(DIR, $DataDir) || Errors('ディレクトリ入出力エラー','ディレクトリのオープンができません。'); @DirFile = readdir(DIR); closedir(DIR); foreach (@DirFile) { push(@File, $_) if (/\.adm$/i); } print 'Content-type: text/html' . $fcode . "\n\n"; print qq|\n|; print qq|\n|; print qq|$Title [登録広告一覧]\n|; print qq|\n|; print qq|\n|; print $Header; print qq|現在掲載中の広告一覧\n|; print qq|
\n|; if (!@File) { print qq|

掲載中の広告はありません。

\n|; } else { print qq|\n|; print qq| \n|; print qq| \n|; print qq| \n|; print qq| \n|; print qq| \n|; print qq| \n|; print qq| \n|; print qq| \n|; print qq| \n|; print qq| \n|; print qq| \n|; print qq| \n|; print qq| \n|; foreach (@File) { $UserID = $_; $UserID =~ s/\.adm$//i; next unless (/\.adm$/i); print qq| \n|; if (open(FILE, "$DataDir$_")) { %Field = stdio::ReadData(split "\t", ); close(FILE); if (-e "$ImageDir$UserID.gif") { $Banner = qq|| . (-s |; } elsif (-e "$ImageDir$UserID.jpg") { $Banner = qq|| . (-s |; } else { $Banner = '(バナー未登録)'; } #/*--- 掲載終了条件達成の判断 ---*/ if ($Field{'View'} + $Field{'Click'} + $Field{'Day'} == 0 && $Field{'Condition'} == 1) { $ClearBgColor = ' bgcolor=FFFFFF'; } 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 ""); $ClearBgColor = ' bgcolor=FFFFFF' if ($Condition == 0); } else { undef($ClearBgColor); } $Field{'Group'} = '-' if (!$Field{'Group'}); 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'} = '未設定'; } $Field{'Group'} = join("
", split(" ", $Field{'Group'})); print qq| $UserID\n|; print qq| $Field{'Group'}\n|; print qq| $Banner\n|; print qq| $Field{'Name'}URL\n|; if ($ClearBgColor) { print qq| 掲載条件達成\n|; } else { print qq| $Field{'View'}\n|; print qq| $Field{'Click'}\n|; print qq| $Field{'Day'}\n|; } print qq| | . stdio::SetTime($TimeFormat,$TimeZone,$Field{'Time'}) . qq|\n|; print qq| \n|; print qq| \n|; print qq| \n|; %Field = (); } else { print qq|
\n|; print qq| \n|; } print qq| \n|; } print qq|
広告IDグループバナー広告主表\示
回数
クリック
回数
掲載
日数
登録日時詳細変更削除
$UserIDファイルオープン失敗
バナーをクリックするとフルサイズで表\示できます。
 \n|; } SelectMenu($Form{'mode'}); print $Footer; print qq|\n|; print qq|\n|; exit(0); } #/*------------- 個別クリック統計 -------------------------------------------*/ sub AccessView { @ClickAddr = stdio::ReadFile($ClickFile); @ClickAddr = reverse(@ClickAddr) if ($ClickAddr[0]); print 'Content-type: text/html' . $fcode . "\n\n"; print qq|\n|; print qq|\n|; print qq|$Title [最近のクリック状況]\n|; print qq|\n|; print qq|\n|; print $Header; print qq|最近のクリック状況\n|; print qq|
\n|; print qq| 
\n|; if ($ClickAddr[0]) { print qq|\n|; print qq| \n|; print qq| \n|; print qq| \n|; print qq| \n|; print qq| \n|; print qq| \n|; for (0 .. 100) { chomp; last if (!$ClickAddr[$_]); ($Time,$Host,$Agent,$Referer) = split "\t", $ClickAddr[$_]; print qq| \n|; print qq| \n|; print qq| \n|; print qq| \n|; if ($Referer =~ /http/i) { print qq| \n|; } else { print qq| \n|; } print qq| \n|; } print qq|
アクセス日時ホストエージェント参照元ページ
| . stdio::SetTime($TimeFormat,$TimeZone,$Time) . qq|$Host$Agent$Referer-
\n|; } print qq| 
\n|; SelectMenu($Form{'mode'}); print $Footer; print qq|\n|; print qq|\n|; exit(0); } #/*------------- ホスト別クリック統計 ---------------------------------------*/ sub AccessReport{ @ClickAddr = stdio::ReadFile($ClickFile); if ($ClickAddr[0]) { foreach (@ClickAddr) { chomp; ($Time,$Host,$Agent) = split "\t"; @Time = gmtime($Time + $TimeZone * 3600); if ($Host =~ /^(\d*).(\d*).(\d*).\d*$/) { $Host = "$1.$2.$3.*"; } elsif ($Host =~ /.*\.(.*)\.(.*)\.(.*)$/) { $Host = "*.$1.$2.$3"; } elsif ($Host =~ /.*\.(.*)\.(.*)$/) { $Host = "*.$1.$2"; } $HostView{$Host} ++; $AgentView{$Agent} ++; $TimeView[$Time[2]] ++; } $i = 0; while (($Key,$Value) = each %HostView) { $HostView[$i] = $Key . "\t" . $Value; $i ++; } undef(%HostView); $i = 0; while (($Key,$Value) = each %AgentView) { $AgentView[$i] = $Key . "\t" . $Value; $i ++; } undef(%AgentView); #/*--- ホスト別データをソート(並び替え) ---*/ foreach (@HostView) { ($Key,$Value) = split "\t"; $Value2 = sprintf("%04d",$Value); push(@Temp ,"$Value2\t$_"); } @HostView = (); foreach (sort @Temp) { ($Value2,@Temp2) = split "\t"; push(@HostView, join("\t", @Temp2)); } @HostView = reverse(@HostView); undef(@Temp); #/*--- エージェント別データをソート(並び替え) ---*/ foreach (@AgentView) { ($Key,$Value) = split "\t"; $Value2 = sprintf("%04d",$Value); push(@Temp ,"$Value2\t$_"); } @AgentView = (); foreach (sort @Temp) { ($Value2,@Temp2) = split "\t"; push(@AgentView, join("\t", @Temp2)); } @AgentView = reverse(@AgentView); } print 'Content-type: text/html' . $fcode . "\n\n"; print qq|\n|; print qq|\n|; print qq|$Title [クリックログ統計]\n|; print qq|\n|; print qq|\n|; print $Header; print qq|クリックログ統計\n|; print qq|
\n|; print qq| 
\n|; if ($ClickAddr[0]) { print qq|ホスト別クリック数統計(上位50件)\n|; print qq|
\n|; print qq|\n|; print qq| \n|; print qq| \n|; print qq| \n|; print qq| \n|; print qq| \n|; for (0 .. 50) { last if (!$HostView[$_]); ($Host,$Click) = split "\t", $HostView[$_]; $GraphWidth = sprintf("%d",$Click*$GraphTimes); $GraphWidth = 1 if (!$GraphWidth); print qq| \n|; print qq| \n|; print qq| \n|; print qq| \n|; print qq| \n|; } print qq|
ホストクリックグラフ
$Host$Click回
\n|; print qq| 
 
\n|; print qq|エージェント別クリック数統計(上位50件)\n|; print qq|
\n|; print qq|\n|; print qq| \n|; print qq| \n|; print qq| \n|; print qq| \n|; print qq| \n|; for (0 .. 50) { last if (!$AgentView[$_]); ($Host,$Click) = split "\t", $AgentView[$_]; $GraphWidth = sprintf("%d",$Click*$GraphTimes); $GraphWidth = 1 if (!$GraphWidth); print qq| \n|; print qq| \n|; print qq| \n|; print qq| \n|; print qq| \n|; } print qq|
エージェントクリックグラフ
$Host$Click回
\n|; print qq| 
 
\n|; print qq|時間帯別クリック数統計\n|; print qq|
\n|; print qq|\n|; print qq| \n|; print qq| \n|; print qq| \n|; print qq| \n|; print qq| \n|; for (0 .. 23) { $GraphWidth = sprintf("%d",$TimeView[$_]*$GraphTimes); $GraphWidth = 1 if (!$GraphWidth); print qq| \n|; print qq| \n|; if ($TimeView[$_]) { print qq| \n|; } else { print qq| \n|; } print qq| \n|; print qq| \n|; } print qq|
時間帯クリックグラフ
$_$TimeView[$_]回0回
\n|; print qq| 
\n|; } print qq| 
\n|; SelectMenu($Form{'mode'}); print $Footer; print qq|\n|; print qq|\n|; exit(0); } #/*------------- 登録広告削除 -----------------------------------------------*/ sub Delete { unlink("$DataDir$Form{'User'}.adm") if (-e "$DataDir$Form{'User'}.adm"); unlink("$DataDir$Form{'User'}.cal") if (-e "$DataDir$Form{'User'}.cal"); unlink("$DataDir$Form{'User'}.val") if (-e "$DataDir$Form{'User'}.val"); unlink("$DataDir$Form{'User'}.clk") if (-e "$DataDir$Form{'User'}.clk"); unlink("$ImageDir$Form{'User'}.gif") if (-e "$ImageDir$Form{'User'}.gif"); unlink("$ImageDir$Form{'User'}.jpg") if (-e "$ImageDir$Form{'User'}.jpg"); unlink("$ImageDir$Form{'User'}.tmp") if (-e "$ImageDir$Form{'User'}.tmp"); @FileRecord = stdio::ReadFile($GroupFile) if (!@FileRecord); $i = 0; if ($FileRecord[0]) { foreach (@FileRecord) { ($User,$Group) = split "\t"; chomp($Group); if ($Form{'User'} eq $User) { $find = 1; last; } $i ++; } if ($find) { splice(@FileRecord, $i, 1); if (open(FILE, ">$GroupFile")) { print FILE @FileRecord; close(FILE); } } } } #/*------------- CSV出力 -------------------------------------------------*/ sub CsvOutput { shift(@Record); print "Content-type: text/plain\n\n"; print "日付,表\示回数,クリック回数,クリック率\n"; foreach (@Record) { chomp; ($Date,$View,$Click) = split "\t"; if ($View != 0) { $ClickRate = sprintf("%.1f",$Click/$View*100); } else { $ClickRate = 0; } print "$Date,$View,$Click,$ClickRate\n"; } exit(0); } #/*------------- メール送信スイッチ切り替え ---------------------------------*/ sub SendMailSwitch { Errors('設定不可','メール送信機能は設定されていないため使えません。') if (!$Mailsend); if ($Form{'mode'} eq 'SendMailOn') { $Field{'Sendmail'} = 1; } else { $Field{'Sendmail'} = 0; } #/*--- レコードに加える ---*/ $Record[0] = '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"; #/*--- ロックのチェック ---*/ Errors('ビジー','システムがビジー状態です。') if (!stdio::LockCheck($DataFile,$UseLock)); #/*--- ファイルのロック/入出力 ---*/ $locked = stdio::FileLock($DataFile,$UseLock,@Record); if ($locked == -1) { Errors('システムエラー','このサーバーではシンボリックリンクが使えません。'); } elsif (!$locked) { Errors('ファイルエラー','ファイルの入出力ができません。'); } } #/*------------- バナー画像アップロード -------------------------------------*/ sub BannerUpload { if ($Form{'Url'} !~ /http:\/\/.+\..+/i) { Errors('フォーム入力ミス','リンク先URLを入力して下さい。'); } elsif (length($Form{'Banner'}) > $MaxSize) { Errors('ファイルサイズ超過',"登録できるバナーのサイズは$MaxSizeバイトまでです。(現在、" . length($Form{'Banner'}) . 'バイト)'); } elsif ($Form{'Banner.name'} && $Form{'Banner.name'} !~ /\.gif/i && $Form{'Banner.name'} !~ /\.jpe?g/i) { Errors('システムエラー','GIF/JPEG以外のファイルはアップロードできません。'); } if ($Form{'Banner.name'}) { #/*--- サーバーに記録 ---*/ open(FILE, ">$ImageDir$Form{'User'}.tmp") || Errors('ファイル入出力エラー','ファイルのオープンができません。'); binmode(FILE); print FILE $Form{'Banner'}; close(FILE); #/*--- リネーム/古いバナー削除 ---*/ if ($Form{'Banner.name'} =~ /\.gif$/) { rename("$ImageDir$Form{'User'}.tmp","$ImageDir$Form{'User'}.gif"); unlink("$ImageDir$Form{'User'}.jpg") if (-e "$ImageDir$Form{'User'}.jpg"); } elsif ($Form{'Banner.name'} =~ /\.jpe?g$/) { rename("$ImageDir$Form{'User'}.tmp","$ImageDir$Form{'User'}.jpg"); unlink("$ImageDir$Form{'User'}.jpg") if (-e "$ImageDir$Form{'User'}.gif"); } undef($Form{'Banner'}); } $Field{'Url'} = $Form{'Url'}; #/*--- レコードに加える ---*/ $Record[0] = '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"; #/*--- ロックのチェック ---*/ Errors('ビジー','システムがビジー状態です。') if (!stdio::LockCheck($DataFile,$UseLock)); #/*--- ファイルのロック/入出力 ---*/ $locked = stdio::FileLock($DataFile,$UseLock,@Record); if ($locked == -1) { Errors('システムエラー','このサーバーではシンボリックリンクが使えません。'); } elsif (!$locked) { Errors('ファイルエラー','ファイルの入出力ができません。'); } } #/*------------- 登録変更フォーム -------------------------------------------*/ sub RegistForm { if ($Form{'mode'} eq 'ChangeForm') { $HiddenField = ' ' . "\n" . ' ' . "\n"; $PasswdMessage = ' (変更時のみ)'; $ModeTitle = '登録情報変更'; if ($Field{'Condition'} == 2) { $Checked2 = ' checked'; } else { $Checked1 = ' checked'; } } else { $HiddenField = ' ' . "\n"; $Field{'Url'}= 'http://'; $UserField = qq|■ 広告ID\n| . qq|
\n| . qq|
\n| . qq|

\n| . qq|

    \n| . qq|
  • 他のIDと重複しない広告のIDを半角英数字で入力してください。IDは変更できません。\n| . qq|
  • 広告バナーのファイル名は"広告ID.gif(jpg)"になります。\n| . qq|
\n| . qq|
\n| . qq|

 

\n|; $ModeTitle = '新規広告登録'; $Checked1 = ' checked'; } print 'Content-type: text/html' . $fcode . "\n\n"; print <<_END_OF_HTML_; $Title [$ModeTitle] $Header $ModeTitle

 

$HiddenField ■ 名称/メールアドレス

名称

メールアドレス

  • スポンサーの名称と担当者名を入力してください。
  • メールアドレスは半角英数字で入力してください。

 

■ 保証表\示回数

  • 保証する表\示回数を半角数字で入力してください。
  • 表\示回数を保証しない場合は、ブランクにしてください。

 

■ 保証クリック回数

  • 保証するクリック回数を半角数字で入力してください。
  • クリック回数を保証しない場合は、ブランクしてください。

 

■ 保証掲載日数

  • 保証する掲載日数を半角数字で入力してください。
  • 掲載日数を保証しない場合は、ブランクにしてください。

 

■ 掲載終了条件

すべての条件を満たす  いずれかの条件を満たす

  • 広告バナーの掲載を終了する条件を選択してください。
  • [すべての条件を満たす]−[保証表\示回数」と[保証クリック回数]と[保証掲載日数]の全てを達成すると広告掲載を終了。
  • [いずれかの条件を満たす]−[保証表\示回数」と[保証クリック回数]と[保証掲載日数]のいずれが達成すると広告掲載を終了。
  • 未設定の(保証しない)項目は無視されます。

 

■ グループ

  • この広告をグループに所属させる場合にはグループ名を入力して下さい。
  • 複数のグループに所属させる場合は、半角スペースで区切って下さい。

 

■ リンク先URL

  • バナーをクリックした時のリンク先のURL(スポンサーのサイト)を半角英数字で入力してください。

 

$UserField ■ スポンサー用パスワード$PasswdMessage


(確認のため再入力)

  • スポンサーがログインするためのパスワードを半角英数字で入力してください。
  • このパスワードは管理者用パスワードと重複しないようにしてください。

 

 

_END_OF_HTML_ SelectMenu($Form{'mode'}); print $Footer; print qq|\n|; print qq|\n|; exit(0); } #/*------------- ファイルへ記録 ---------------------------------------------*/ sub RegistFile { #/*--- エラーチェック ---*/ if (!$Form{'Name'}) { Errors('フォーム入力ミス','名称を入力して下さい。'); } elsif (!$Form{'Email'}) { Errors('フォーム入力ミス','メールアドレスを入力して下さい。'); } elsif ($Form{'Email'} !~ /[\w-]+@[\w-]+\.[\w-\.]+/) { Errors('フォーム入力ミス','メールアドレスの形式が違います。'); } elsif ($Form{'Url'} !~ /http:\/\/.+\..+/i) { Errors('フォーム入力ミス','URLを入力して下さい。'); } elsif ($Form{'Group'} ne "" && $Form{'Group'} !~ /[\w\s]/) { Errors('フォーム入力ミス','グループ名は半角英数字で入力して下さい。'); } elsif (!$Form{'User'}) { Errors('フォーム入力ミス','広告IDを入力して下さい。'); } elsif ($Form{'View'} eq "" && $Form{'Click'} eq "" && $Form{'Day'} eq "") { Errors('フォーム入力ミス','保証条件を最低一つ入力して下さい。'); } elsif ($Form{'View'} ne "" && $Form{'View'} !~ /\d/) { Errors('フォーム入力ミス','保証表示回数は半角英数字で入力して下さい。'); } elsif ($Form{'Click'} ne "" && $Form{'Click'} !~ /\d/) { Errors('フォーム入力ミス','保証クリック回数は半角英数字で入力して下さい。'); } elsif ($Form{'Day'} ne "" && $Form{'Day'} !~ /\d/) { Errors('フォーム入力ミス','保証掲載日数は半角英数字で入力して下さい。'); } elsif ($Form{'Passwd'} eq $MasterKey) { Errors('フォーム入力ミス','ユーザーパスワードはマスターキーと重複できません。'); } elsif ($Form{'User'} eq 'new' || $Form{'User'} eq 'all') { Errors('フォーム入力ミス','入力された広告IDは予約されているため使用できません。'); } @Group = stdio::ReadFile($GroupFile); @Group = () if (!$Group[0]); #/*--- 新規登録時の設定 ---*/ if ($Form{'mode'} eq 'NewRegist') { if (!$Form{'Passwd'}) { Errors('フォーム入力ミス','パスワードを入力して下さい。'); } elsif ($Form{'Passwd'} ne $Form{'Passwd_Retype'}) { Errors('フォーム入力ミス','パスワードの確認が一致しません。'); } elsif (-e $DataFile) { Errors('フォーム入力ミス','入力されたIDは既に使用されています。'); } #/*--- グループの設定 ---*/ push(@Group, "$Form{'User'}\t$Form{'Group'}\n") if ($Form{'Group'}); $Field{'Time'} = time; $Field{'SetView'} = $Form{'View'}; $Field{'SetClick'} = $Form{'Click'}; $Field{'SetDay'} = $Form{'Day'}; $Field{'TotalView'} = $Field{'TotalClick'} = $Field{'TotalDay'} = $Field{'PastDay'} = 0; $Field{'Passwd'} = stdio::CryptString($Form{'Passwd'}); #/*--- 登録変更時の設定 ---*/ } else { #/*--- グループの設定 ---*/ if ($Form{'Group'}) { foreach (@Group) { ($User,$Group) = split "\t"; if ($User eq $Form{'User'}) { $find = 1; last; } $i ++; } if ($find) { $Group[$i] = "$Form{'User'}\t$Form{'Group'}\n"; } else { push(@Group, "$Form{'User'}\t$Form{'Group'}\n") if ($Form{'Group'}); } } #/*--- パスワードの設定 ---*/ if ($Form{'Passwd'} ne $Form{'Passwd_Retype'} && $Form{'Passwd'}) { Errors('フォーム入力ミス','パスワードの確認が一致しません。'); } elsif ($Form{'Passwd'}) { $Field{'Passwd'} = stdio::CryptString($Form{'Passwd'}); } } #/*--- レコードに加える ---*/ $Record[0] = 'Time' . "\b" . $Field{'Time'} . "\t" . 'Name' . "\b" . $Form{'Name'} . "\t" . 'Email' . "\b" . $Form{'Email'} . "\t" . 'Url' . "\b" . $Form{'Url'} . "\t" . 'Group' . "\b" . $Form{'Group'} . "\t" . 'Condition' . "\b" . $Form{'Condition'} . "\t" . 'SetView' . "\b" . $Field{'SetView'} . "\t" . 'SetClick' . "\b" . $Field{'SetClick'} . "\t" . 'SetDay' . "\b" . $Field{'SetDay'} . "\t" . 'View' . "\b" . $Form{'View'} . "\t" . 'Click' . "\b" . $Form{'Click'} . "\t" . 'Day' . "\b" . $Form{'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" . $REMOTE_HOST . "\t" . 'Addr' . "\b" . $REMOTE_ADDR . "\t" . 'Agent' . "\b" . $HTTP_USER_AGENT . "\t" . "\n"; %Field = stdio::ReadData(split "\t", $Record[0]); #/*--- ロックのチェック ---*/ Errors('ビジー','システムがビジー状態です。') if (!stdio::LockCheck($DataFile,$UseLock)); #/*--- ファイルのロック/入出力 ---*/ $locked = stdio::FileLock($DataFile,$UseLock,@Record); if ($locked == -1) { Errors('システムエラー','このサーバーではシンボリックリンクが使えません。'); } elsif (!$locked) { Errors('ファイル入出力エラー','ファイルの入出力ができません。'); } if ($Form{'Group'}) { open(FILE, ">$GroupFile") || Errors('ファイル入出力エラー','グループファイルへの書き込みができません。'); print FILE @Group; close(FILE); } } #/*------------- セレクトメニュー表示 ---------------------------------------*/ sub SelectMenu { $Selected{$_[0]} = ' selected'; print qq|
\n|; print qq| \n|; print qq| \n|; print qq| \n|; print qq| \n|; print qq| \n|; print qq| \n|; print qq|
\n|; print qq|
\n|; } #/*------------- エラー発生時の処理 -----------------------------------------*/ sub Errors { @ErrorMessage = @_; $ErrorMessage[0] = 'システムエラー' if (!$ErrorMessage[0]); $ErrorMessage[1] = '原因不明のエラー発生により強制終了されました。' if (!$ErrorMessage[1]); $ErrorMessage[2] = '

' . $ErrorMessage[2] . '

' if ($ErrorMessage[2]); print 'Content-type: text/html' . $fcode . "\n\n"; print <<_END_OF_HTML_; $Title [$ErrorMessage[0]] $ErrorMessage[0]

$ErrorMessage[1]

$ErrorMessage[2]

 このプログラムはリクエスト処理中にエラーが発生したため、処理を中断しました。エラーの発生原因として、リクエスト内容の不備、アクセス権が与えられていない、誤った設定がなされている、あるいは突発的なサーバーエラー等の可能\性が考えられます。
 表\示されたエラーメッセージをご確認の上、再試行してみて下さい。ブラウザでリロードすることで再試行できます。繰り返し、エラーメッセージが表\示される場合は、このサイトの管理者に連絡して下さい。

前ページへ戻る


_END_OF_HTML_ exit(1); } sub sigexit { if (-e $stdio::lockfile) { unlink($stdio::lockfile); } if (-e $stdio::tempfile) { unlink($stdio::tempfile); } exit(1); }