#!/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;