phpでカウンタを実装するソースコード

▼前提
phpファイルと同一階層にdataディレクトリが存在していること

▼phpソースコード
<?php
date_default_timezone_set('Asia/Tokyo');

//ログ形式は 日付け|昨日のカウント|今日のカウント|合計カウント

$now_date = date('Ymd'); // 今日の日付
$ydy_date = date('Ymd', strtotime('-1 day')); // 昨日の日付

// カウンタ記録ファイル
$danm = basename($_SERVER['PHP_SELF']);
$danm = str_replace(".php", ".txt", $danm);
$count_log = dirname(__FILE__) .'/data/'.$danm;

$fp = fopen($count_log, 'a'); //ログファイル読み込み

$dat = file($count_log); //ログを配列に読み込む

if (empty($dat)) { //ログが空の場合
flock($fp, LOCK_EX);
fputs($fp, '|||');
fclose($fp);
}

//変数を展開(比較用日付、昨日、今日、総合)
list($key_date, $ydy, $tdy, $ady) = explode('|', $dat[0]);

if ($key_date === $now_date) { //ログの日付が今日ならカウントアップ
$tdy++;

} elseif ($key_date === $ydy_date) { //日付が変わったら昨日に今日を、今日に1を入れる。
$ydy = $tdy;
$tdy = 1;

} else { //ログの日付が今日でも昨日でもない場合(昨日以前最近のアクセスが0)
$ydy = 0; //昨日のアクセスは0となる
$tdy = 1; //今日の最初のアクセス
}

$ady++; //合計カウントアップ

//桁数整形
$ydy = sprintf('%03d', $ydy); //昨日
$tdy = sprintf('%03d', $tdy); //今日
$ady = sprintf('%06d', $ady); //合計

//ファイル更新
$new_dat = implode('|', array($now_date, $ydy, $tdy, $ady));

$fp = fopen($count_log, 'r+');
flock($fp, LOCK_EX);
fputs($fp, $new_dat);
fclose($fp);


//htmlとして出力
$ady = sprintf('%05d', $ady); //合計
echo 'document.write("Total: '.$ady.'<br>Today: '.$tdy.'<br>Yesterday: '.$ydy.'");';

//end
?>

コメントフォーム

以下のフォームからコメントを投稿してください

×
スポンサードリンク


この広告は一定期間更新がない場合に表示されます。
コンテンツの更新が行われると非表示に戻ります。
また、プレミアムユーザーになると常に非表示になります。