#!/usr/bin/perl
#↑Perlのパスをサーバに合わせて記述して下さい。
package AppsPage::Gifcntdx::Counter;
my $define = {};
#++++++++++++++++++++++++++++#
# 目次
#++++++++++++++++++++++++++++#
# 1:基本設定
# 2:設置環境設定
#++++++++++++++++++++++++++++#
#【1:基本設定】
#-----------------------------------------------------------------------------#
# ■ファイルロック方法
# 0 ロックしない
# 1 mkdir関数 / flock関数が使えないサーバ専用
# 2 flock関数 / *標準
$define->{'LOCK_METHOD'} = 2;
# ※基本的に以上の設定で、サーバへ転送可能です。
#【2:設置環境設定】
#-----------------------------------------------------------------------------#
#
# 以下のの設定項目で、セキュリティ強化や、設置環境特有の状態に変更できますが、
# 分からない場合、変更しない方が無難です。
#
# ▼ディレクトリ構成(ファイル構成図参照)
# ■ライブラリディレクトリ(このファイルからのパス)
# ※2項目とも同じ設定
$define->{'LIB_DIR'} = 'lib/';
# ■データ記録ディレクトリ(このファイルからのパス)
$define->{'DATA_DIR'} = 'data/';
# ■ロックディレクトリ(このファイルからのパス)
$define->{'LOCK_DIR'} = 'lock/';
# ■作業用ディレクトリ(このファイルからのパス)
# 通常、データ記録ディレクトリと同じ。
$define->{'TMP_DIR'} = 'data/';
# ▼セキュリティ強化
# ■suExec環境オプション('0'#標準 / '1' suExec環境限定)
# '0'#標準の場合、データファイルパーミッションは常に666です。
# '1'を設定した場合、更新時、元のパーミッションを引継ぐか、644です。
# ※分からない方、suExec環境でない方は、『絶対に』変更しないで下さい。
$define->{'SU_MODE'} = '0';
# ▼flock関数の因数(通常変更不要)
# ■排他ロック
$define->{'LOCK_EX'} = '2';
# ■アンロック
$define->{'LOCK_UN'} = '8';
#=============================================================================#
#
# これ以下は、変更の必要ありません。
#
#=============================================================================#
sub new { return bless $define; }
# ↓主な処理
#-----------------------------------------------------------------------------#
package AppsPage::Gifcntdx::Counter::Countup;
#use strict;
my $this = new();
$this->start;
$this->stop;
sub new {
my $this = new AppsPage::Gifcntdx::Counter::;
return bless $this;
}
# →処理開始
sub start {
my $this = shift;
#基本的なライブラリ
require($this->{'LIB_DIR'}.'modus/OO.cgi');
require($this->{'LIB_DIR'}.'modus/TytiCnt2.cgi');
require($this->{'LIB_DIR'}.'modus/Filelock.cgi');
#ファイルロック
$this->{'lock'} = new AppsPage::Gifcntdx::Filelock::(
$this->{'LOCK_METHOD'},
$this->{'LOCK_DIR'},
'flock',
$this->{'LOCK_EX'},
1,
$this->{'LOCK_UN'}
);
#カウンタ
$this->{'counter'} = new AppsPage::Gifcntdx::TytiCnt2::(
$this->{'DATA_DIR'}.'counter.cgi',
);
########## 区切 ##########
my $check;
#カウンタの処理
if( $this->{'lock'}->lock('EX') ) {
$check = $this->{'counter'}->doCount;
if( $check eq 2) {
#日付更新
require($this->{'LIB_DIR'}.'mode/m_cntupd.cgi');
if( !$this->doUpdate ) { $this->error(''); }
}
$this->{'lock'}->unlock;
}
else { $this->error(''); }
########## 区切 ##########
#カウンタ出力
my $gif_cgi = 'gif.cgi?n=';
if($check) {
$this->outHeader;
my( $base_url, $days_fig, $total_fig, $html_code) = split(
/<>/, $this->{'counter'}->{'result'}->{'info'}
);
$gif_cgi = $base_url.$gif_cgi;
my $tday = $this->{'counter'}->{'result'}->{'tday'};
my $yday = $this->{'counter'}->{'result'}->{'yday'};
my $total = $this->{'counter'}->{'result'}->{'total'};
$tday = '
';
$yday = '
';
$total = '
';
$html_code =~ s/\t/ /g;
$html_code =~ s/\$\(tday\)/$tday/g;
$html_code =~ s/\$\(yday\)/$yday/g;
$html_code =~ s/\$\(total\)/$total/g;
print "document.write('$html_code');\n";
}
#エラー出力
else { $this->error(''); }
}
# →HTTPヘッダ
sub outHeader {
my $this = shift;
wait;###
if( $ENV{'SCRIPT_NAME'} =~ /nph\-[^\/\\]+$/ ||
( $ENV{'MOD_PERL'} && $ENV{'PERL_SEND_HEADER'} ne 'On' )
) {
print "HTTP/1.1 200 OK\n";
}
print "Pragma: no-cache\r\n";
print "Cache-Control: no-cache\r\n";
print "Expires: -1\r\n";
print "Content-Type: text/plain\r\n";
print "\r\n";
}
# →終了
sub stop {
my $this = shift;
$this->{'lock'}->unlock;
exit(0);
}
# →エラー
sub error {
my $this = shift;
$this->{'lock'}->unlock;
$this->outHeader;
print "document.write('ERROR');\n";
$this->stop;
}
0;