#!/usr/local/bin/perl #↑Perlのパスをサーバに合わせて記述して下さい。 package AppsPage::Txtcntdx::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::Txtcntdx::Counter::Countup; #use strict; my $this = new(); $this->start; $this->stop; sub new { my $this = new AppsPage::Txtcntdx::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::Txtcntdx::Filelock::( $this->{'LOCK_METHOD'}, $this->{'LOCK_DIR'}, 'flock', $this->{'LOCK_EX'}, 1, $this->{'LOCK_UN'} ); #カウンタ $this->{'counter'} = new AppsPage::Txtcntdx::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(''); } ########## 区切 ########## #カウンタ出力 if($check) { #ヘッダ出力 $this->outHeader; my( $komma, $days_fig, $total_fig, $html_code) = split( /<>/, $this->{'counter'}->{'result'}->{'info'} ); my $tday = $this->{'counter'}->{'result'}->{'tday'}; my $yday = $this->{'counter'}->{'result'}->{'yday'}; my $total = $this->{'counter'}->{'result'}->{'total'}; if( $komma ) { while( $tday =~ s/(\d)(\d\d\d)(?!\d)/$1,$2/g ) { next;} while( $yday =~ s/(\d)(\d\d\d)(?!\d)/$1,$2/g ) { next; } while( $total =~ s/(\d)(\d\d\d)(?!\d)/$1,$2/g ) { next; } } else { $tday = sprintf('%0'.$days_fig.'d',$tday); $yday = sprintf('%0'.$days_fig.'d',$yday); $total = sprintf('%0'.$total_fig.'d',$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\r\n"; } print "Content-Type: text/plain\r\n"; print "Pragma: no-cache\r\n"; print "Cache-Control: no-cache\r\n"; print "Expires: -1\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;