--- plugin/counter.inc.php 2004-10-07 21:35:14.000000000 +0900 +++ /home/nosuke/counter.inc.php 2004-11-03 18:53:18.000000000 +0900 @@ -59,6 +59,7 @@ global $vars; static $counters = array(); static $default; + static $iplimit = 50; // カウンタのデフォルト値 if (!isset($default)) @@ -93,7 +94,8 @@ foreach ($default as $key=>$val) { - $counters[$page][$key] = rtrim(fgets($fp,256)); + // $iplimits * 16 以上を目安に設定 + $counters[$page][$key] = rtrim(fgets($fp,1024)); if (feof($fp)) { break; } } // ファイル更新が必要か? @@ -111,12 +113,36 @@ $counters[$page]['total']++; } // IPアドレスが異なる + /* else if ($counters[$page]['ip'] != $_SERVER['REMOTE_ADDR']) { $modify = TRUE; $counters[$page]['ip'] = $_SERVER['REMOTE_ADDR']; $counters[$page]['today']++; $counters[$page]['total']++; + } */ + else{ + $ips = split(",", $counters[$page]['ip']); + $ipn = count($ips); + $ipmatch = FALSE; + for( $i = 0; $i < $ipn; $i ++ ){ + if( $ips[$i] == $_SERVER['REMOTE_ADDR'] ){ + $ipmatch = TRUE; + break; + } + } + if( !$ipmatch ) { + # 見付からなかったら,末尾に追加する + array_push($ips, $_SERVER['REMOTE_ADDR']); + if($ipn >= $iplimit){ + # 保持IPアドレス数が上限を越えたら先頭を消す + array_shift( $ips ); + } + $modify = TRUE; + $counters[$page]['ip'] = implode(",", $ips); + $counters[$page]['today']++; + $counters[$page]['total']++; + } } //ページ読み出し時のみファイルを更新