読者です 読者をやめる 読者になる 読者になる

PHPでアクセスカウンタを作ってみる

各ページのアクセス数をひとつのテキストファイルを保存し,総アクセス数, 今日アクセス数, 昨日アクセス数を表示できるアクセスカウンタ.多分動く.

mycounter.php

<?php
function mycounter(){
	$countDatas = array();
	/* 書式 */
	/* array(ページ名 => array('all'      => 総アクセス数,
                                   'today'     => 昨日アクセス数,
                                   'yesterday' => 昨日アクセス数,
                                   'date'      => 最期に記録した日付)) */

	$filename = "counter.txt";
	/* 書式 */
	/* ページファイル名=総アクセス数,今日アクセス数,昨日アクセス数,最期に記録した日付 */
	

	/* ファイルの読み込み */
	if(file_exists($filename)){
		$file = fopen($filename, "r");
		while(!feof($file)){
			$line = fgets($file);
			if($line == "")
				continue;
			$matchEqual = preg_split("/=/", $line, 2); /* =で分断 */
			$matchCron  = preg_split("/,/", $matchEqual[1], 4); /* ,で分断 */
			$pageName = $matchEqual[0];
			$countdatas[$pageName] = array();
			$countDatas[$pageName]['all']       = intval($matchCron[0]);
			$countDatas[$pageName]['today']     = intval($matchCron[1]);
			$countDatas[$pageName]['yesterday'] = intval($matchCron[2]);
			$countDatas[$pageName]['date']      = intval($matchCron[3]);
		}
		fclose($file);
	}
	
	/* 日付をまたいでいたら更新 */
	if($countDatas[$_SERVER['SCRIPT_NAME']]['date'] != null
			&& $countDatas[$_SERVER['SCRIPT_NAME']]['date'] != intval(date('j'))){
		$countDatas[$_SERVER['SCRIPT_NAME']]['yesterday'] =
	          $countDatas[$_SERVER['SCRIPT_NAME']]['today'];
		$countDatas[$_SERVER['SCRIPT_NAME']]['today']     = 0;
	}
	
	/* カウンタの更新,設定 */
	$countDatas[$_SERVER['SCRIPT_NAME']]['all']++;
	$countDatas[$_SERVER['SCRIPT_NAME']]['today']++;
	if($countDatas[$_SERVER['SCRIPT_NAME']]['yesterday'] == null)
		$countDatas[$_SERVER['SCRIPT_NAME']]['yesterday'] = 0;
	
	/* ファイルに書き込み */
	$file = fopen($filename, "w");
	flock($file, LOCK_EX);
	foreach($countDatas as $key => $countData){
		fputs($file, $key.'='.$countData['all'].','.$countData['today'].','.$countData['yesterday'].','.date('j')."\n");
	}
	flock($file, LOCK_UN);
	fclose($file);

	return $countDatas[$_SERVER['SCRIPT_NAME']];
}
?>

test.php

<?php
require_once('mycounter.php');

$countData = mycounter();
print('all '.$countData['all'].'<br />');
print('today '.$countData['today'].'<br />');
print('yesterday '.$countData['yesterday']);
?>