#!/usr/local/bin/perl

#		−　SSI無しで簡単呼び出しカウンター　−
#	JS-Count	Ver1.01(B)

#		HP作成不支援万歳　Starnge-Lady(Honest)	Tohru
#		http://shena.myako.net/strangelady/

# −−−−−　初期設定　−−−−−
# データ保存ファイル名
$DATAFILE = './jscount.dat';

# 表示桁数
$KETA = 7;
# −−−−−−−−−−−−−−−−−−−−
# 表示モード	0=テキスト表示	1=画像表示
$MODE = 0;

# 画像モードの場合：画像のあるディレクトリ（フォルダ）
$IMAGE_DIR = './';		# 表示するページと同じ場所ならこのまま
# 画像モードの場合：画像の拡張子
$FILETYPE = '.gif';
# −−−−−　初期設定はここまで　−−−−−

$count = &fileread($DATAFILE);		#カウントデータ読み込み
$count ++;
$save = &filesave($DATAFILE,$count);	#新カウントデータ保存

if ($save ne ''){
	# 保存エラー時の処理
	&output($save);
	exit;
}

# カウント数を表示のために整形
$data = '0000000000' . $count;
$len = length($data);
$data = substr($data,$len - $KETA);

if ($MODE == 1){
	$count = $data;
	$data = '';
	for ($i = 0; $i < $KETA; $i++){
		$data .= "<img src='$IMAGE_DIR" . substr($count,$i,1) . "$FILETYPE' border='0'>";
	}
}
&output($data);				#カウンター表示
exit;

# −−−−−−−−−−−−−−−−−−−−
# −−−−−　データの読み込み　−−−−−
sub fileread {
	local $file = $_[0];
	if (open(FILE,"$file")) {
		$value = <FILE>;
		close(FILE);
	}
	return ($value);
}

# −−−−−　データの保存　−−−−−
sub filesave{
# DataSaveRutin FileLock 1.01
	local ($file,$data) = @_;
	$tempfile = $file;
	$tempfile =~ s/([\w-]+)\.[\w]+$/$$\.tmp/;
	$flagfile = $file;
	$flagfile =~ s/([\w-]+)\.[\w]+$/$1\.tmp/;

	$maketime = (stat($flagfile))[9];
	if ($maketime ne '' && (time - $maketime) >300){unlink $flagfile;}

	if (!open(FILE,">$tempfile")) { return ('エラー！：フォルダのパーミッションを７７７にする必要があります'); }
	print FILE $data;
	close(FILE);
	chmod 0666,$tempfile;

	$match = 0;
	for (1 .. 10){
		if (! -e $flagfile){
			if (!open(FILE,">$flagfile")) { unlink $tempfile; return ('エラー！：フォルダのパーミッションを７７７にする必要があります'); }
			print FILE "このファイルが削除されずに残っている場合は手動で削除してください";
			close(FILE);
			chmod 0666,$flagfile;
			rename ($tempfile,$file);
			unlink $flagfile;
			$match = 1;
			last;
		}
		sleep(1);
	}
	if ($match == 0){
		unlink $tempfile;
		return ('エラー！：サーバーが混雑しています');
	}
	return ();
}

# −−−−−　カウンター表示　−−−−−
sub output {
	local $data = $_[0];
	print "Content-type: text/plain\n\n";
	print "<!--\n";
	print "document.write(\"$data\");\n";
	print "//-->\n";
}

# End of Script
