#!/usr/local/bin/perl
#↑Perlのパスをサーバに合わせて記述して下さい。
package AppsPage::Jscntdx;
my $define = {};
#【プログラム情報】
#------------------------------------------------------------------------------#
# (C) Apps Page.
# http://apps.cside.com/
#
# プログラム名 【 JSカウンタDX 】
# バージョン 【 1.5 】#
#
#【ファイル構成図】
#-----------------------------------------------------------------------------#
#
# public_html/
# │
# ├ index.html ……………………………… (755) カウンタ呼出しHTML
# │
# └ jscntdx/ ……………………………… (755) プログラムディレクトリ
# ├ cnt.cgi …………………………… (755) このファイル。
# ├ layout.cgi ……………………… (644) レイアウト設定ファイル。
# └ data.cgi ………………………… (666) カウント数記録ファイル
#
# ★出力レイアウトを変更するには?★
# 「layout.cgi」をテキストエディタで編集して、サーバへ転送します。
# 「layout.cgi」のフォーマットは以下の通りです。
# 改行を入れる場合、「
」などHTMLタグを書込みます。
#
# $(tday) の部分が今日のカウント数に置き換えられます。
# $(yday) の部分が昨日のカウント数に置き換えられます。
# $(total) の部分が累計のカウント数に置き換えられます。
# ★カウント数を初期化するには?★
# 「data.cgi」をテキストエディタで編集して、サーバへ転送します。
# 「data.cgi」のフォーマットは以下の通りです。
#
# 1行目は、今日のカウント数
# 2行目は、昨日のカウント数
# 3行目は、累計のカウント数
# 4行目は、8ケタの数字で表す今日の日付。2100年1月1日なら、21000101。
#
# ※今日、昨日のカウント数を初期化する場合、日付も合わせて初期化します。
#【設置環境設定】
#-----------------------------------------------------------------------------#
# ■ファイルロック(flock関数)
# '0' / ロックしない
# '1' / flock関数でロックする#標準
$define->{'FILELOCK'} = '1';
# ■カウンタ最短ケタ数
$define->{'DAYS_FIG'} = 4;
# ■カウンタ最短ケタ数
$define->{'TOTAL_FIG'} = 6;
# ■HTTPヘッダ(通常変更不要)
# 中にはこの項目を変更しないとカウンタを表示できないサーバもあります。
# 詳しくはご利用中のサーバ管理にお訪ね下さい。
# "Content-Type: text/plain\n\n" / *標準
$define->{'HTTP_HEADER'} = "Content-Type: text/plain\n\n";
# ■カウント数記録ファイル(data.cgi)のパス
$define->{'DATA_FILE'} = 'data.cgi';
# ■レイアウトファイル(layout.cgi)のパス
$define->{'LAYOUT'} = 'layout.cgi';
# ▼flock関数の因数
# ■排他ロック(通常変更不要)
$define->{'LOCK_EX'} = '2';
# ■アンロック(通常変更不要)
$define->{'LOCK_UN'} = '8';
#【呼出しタグ】
#-----------------------------------------------------------------------------#
# ファイル構成図どおりに設置した場合、次のタグを
# index.htmlに貼付けてカウンタを呼出せます。
#
#
#
# ファイル構成図とは別の方法で設置した場合、次を参考にどうぞ。
#
#
#
# カウントしたいページに上記のタグを貼付けてカウンタを呼び出します。
# 設置アドレス部分は、http://〜〜〜/ または、相対パスで指定します。
#
#
#=============================================================================#
#
# これ以下は、変更の必要ありません。
#
#=============================================================================#
#日付け
my($sec, $min, $hour, $mday, $mon, $year, $wday) = gmtime(
time + (60 * 60 * 9)
);
my $now = ($year += 1900).sprintf('%02d',++$mon).sprintf('%02d',$mday);
#カウント
my ( $tday, $yday, $total, $date );
if( !open(CNT,'<'.$define->{'DATA_FILE'}) ) { exit(0); }
if( $define->{'FILELOCK'} && !flock(CNT,$define->{'LOCK_EX'}) ) { exit(0); }
chomp( $tday = readline *CNT );
chomp( $yday = readline *CNT );
chomp( $total = readline *CNT );
chomp( $date = readline *CNT );
if( $date ne $now ) {
$yday = $tday;
$tday = 0;
$date = $now;
}
$tday++;
$total++;
if( !open(CNT,'>'.$define->{'DATA_FILE'}) ) { exit(0); }
print CNT $tday,"\n";
print CNT $yday,"\n";
print CNT $total,"\n";
print CNT $date,"\n";
if( $define->{'FILELOCK'} ) { flock(CNT,$define->{'LOCK_UN'}); }
close(CNT);
#ケタ
$tday = sprintf('%0'.$define->{'DAYS_FIG'}.'d',$tday);
$yday = sprintf('%0'.$define->{'DAYS_FIG'}.'d',$yday);
$total = sprintf('%0'.$define->{'TOTAL_FIG'}.'d',$total);
#レイアウトファイル
my ( $html_code );
if( !open(LAYOUT,'<'.$define->{'LAYOUT'}) ) { exit(0); }
while ( readline *LAYOUT ) { $html_code .= $_; }
close(LAYOUT);
$html_code =~ s/\'/\\\'/g;
$html_code =~ s/\r\n/\n/g;
$html_code =~ s/\r//g;
$html_code =~ s/\n/ /g;
$html_code =~ s/\$\(tday\)/$tday/g;
$html_code =~ s/\$\(yday\)/$yday/g;
$html_code =~ s/\$\(total\)/$total/g;
#主力
if( $ENV{'SCRIPT_NAME'} =~ /nph\-[^\/\\]+$/ ||
( $ENV{'MOD_PERL'} && $ENV{'PERL_SEND_HEADER'} ne 'On' )
) {
print "HTTP/1.1 200 OK\n";
}
print $define->{'HTTP_HEADER'};
print "document.write('$html_code');\n";
exit(0);
0;