差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

blog:2011:0411-1804 [2016/02/15 18:45] (現在)
ライン 1: ライン 1:
 +**<fs 130%>​2011年4月11日</​fs>​**
 +
 +====== 続・アクセスカウンター ======
 +数日様子見ていい感じに動いているかな?\\
 +予想通りの数字の少なさで泣けてくるけど。
 +
 +===== クローラー =====
 +デバッグでログ取って気になったのがYahooとgoogleのクローラーの扱い。\\
 +BOTなんだからアクセス数から弾くべきなんだろうな~\\
 +HTTP_USER_AGENT見ればわかるからとりあえず[[http://​help.yahoo.com/​help/​us/​ysearch/​slurp|Yahoo! Slurp]]と[[http://​www.google.com/​bot.html|Googlebot]]はノーカウントに。
 +
 +===== phpコードとか =====
 +元ネタは[[http://​www.php-z.net/​c5/​]]
 +
 +  /​lib/​counter/​
 +  にcount.dat、lock.dat、counter.phpを配置。
 +  /​lib/​images/​counter/​
 +  に0.gif~9.gif、today.gif、yesterday.gifを配置。
 +  /​lib/​tpl/​arctic/​footer.html
 +  に呼出しコード追加。
 +
 +==== /​lib/​images/​counter/​0-9.gif ====
 +{{blog:​2011:​counter_number.gif?​nolink}}\\
 +これをバラしたもの。
 +
 +==== /​lib/​counter/​counter.php ====
 +クローラーとadminログインでノーカウント。\\
 +IPを$ipcheck_max個分保持してその間は重複カウント無し。
 +<code php /​lib/​counter/​counter.php>​
 +<?php
 +function site_counter() {
 + global $INFO;
 +
 + //  同一IPはカウントしない(yes=1 no=0)
 + $ipcheck = 1;
 + //  重複カウントしないIP保存個数
 + $ipcheck_max = 5;
 + //  カウント用GIF画像ディレクトリ
 + $total_counter_path = DOKU_BASE.'​lib/​images/​counter/';​
 + $today_counter_path = DOKU_BASE.'​lib/​images/​counter/';​
 + $yes_counter_path =   ​DOKU_BASE.'​lib/​images/​counter/';​
 + $today_img_path = DOKU_BASE.'​lib/​images/​counter/​today.gif';​
 + $yes_img_path =   ​DOKU_BASE.'​lib/​images/​counter/​yesterday.gif';​
 +
 + //  カウンタ記録ファイル
 + $count_file = dirname(__FILE__).'/​count.dat';​
 + $lock_file = dirname(__FILE__).'/​lock.dat';​
 + //  カウント数の桁・昨日・今日・合計
 + $fig1 = 3;
 + $fig2 = 3; 
 + $fig3 = 6;
 +
 + //​--------------設定ここまで----------------
 +
 + //  ロック
 + $fp_lock = fopen($lock_file,​ "​r"​);​
 + flock($fp_lock,​ LOCK_EX);
 +
 + $today_date = date("​Ymd"​);​
 + $yes_date =  date("​Ymd",​ time() - 24*60*60);
 +
 + $count_buf = file($count_file);​
 + if ($count_buf == false) echo 'file error '​.$count_file;​
 + $ip = $_SERVER['​REMOTE_ADDR'​];​
 +
 + //  変数を展開
 + list($count_date,​ $yes_count, $today_count,​ $total_count,​ $ip_buf) = explode("​|",​ $count_buf[0]);​
 + $ip_list = explode(",",​ $ip_buf);
 + if (count($ip_list) == 0) $ip_list = array();
 +
 + $update = false;
 + $ip_count = true;
 + //  IPの重複チェック
 + if ($ipcheck && $count_date == $today_date) {
 + $ipn = 0;
 + foreach ($ip_list as $ip_old) {
 + $ip_old_ip = explode("#",​ $ip_old);
 + if ($ip == $ip_old_ip[0]) {
 + $ip_count = false;
 + // ​ IPが末尾(最新アクセス)でなければ末尾に
 + if ($ipn < count($ip_list)-1) {
 + unset($ip_list[$ipn]);​
 + $ip_list[] = $ip_old;
 + $update = true;
 + }
 + break;
 + }
 + $ipn += 1;
 + }
 + }
 +
 + //  adminでログインされてたらならカウントしない
 + if ($INFO['​isadmin'​]) {
 + $update = false;
 + $ip_count = false;
 + }
 +
 + //  カウント
 + if ($ip_count) {
 + //  crawler弾き
 + $crawler = false;
 + $ip_host = gethostbyaddr($ip);​
 + $ip_agent = $_SERVER['​HTTP_USER_AGENT'​];​
 + if (strpos($ip_agent,​ "​Yahoo! Slurp"​) != false) $crawler = true;
 + if (strpos($ip_agent,​ "​Googlebot"​) != false) $crawler = true;
 + //
 + if (!$crawler) {
 + if ($count_date == $today_date) {
 + $today_count++;​
 + } else {
 + $yes_count = ($count_date == $yes_date) ? $today_count : 0;
 + $today_count = 1;
 + unset($ip_list);​
 + $ip_list = array();
 + }
 + $update = true;
 + $total_count++;​
 + $ip_list[] = $ip;
 + if (count($ip_list) > $ipcheck_max) array_shift($ip_list);​
 + }
 + }
 +
 + //  カウントファイル更新
 + if ($update) {
 + $ip_buf = implode(",",​ array_values($ip_list));​
 + $buf = implode("​|",​ array($today_date,​ $yes_count, $today_count,​ $total_count,​ $ip_buf));
 +
 + $fp = fopen($count_file,​ "​w"​);​
 + fputs($fp,​ $buf);
 + fclose($fp);​
 + }
 + //  ロック解除
 + fclose($fp_lock);​
 +
 + //  桁数整形
 + $yes_count_str ​  = sprintf("​%0"​.$fig1."​d",​ $yes_count);​
 + $today_count_str = sprintf("​%0"​.$fig2."​d",​ $today_count);​
 + $total_count_str = sprintf("​%0"​.$fig3."​d",​ $total_count);​
 + $title = "​Total:​{$total_count_str} Today:​{$today_count_str} Yesterday:​{$yes_count_str}";​
 +
 + //  タグを取得
 + $yes_count_str ​  = outhtml($yes_count_str, ​  ​$yes_counter_path);​
 + $today_count_str = outhtml($today_count_str,​ $today_counter_path);​
 + $total_count_str = outhtml($total_count_str,​ $total_counter_path);​
 + $size = getimagesize($today_img_path);​
 + $today_img = "&​nbsp;<​img src=\"​{$today_img_path}\"​ alt=\"​today\"​ {$size[3]}>";​
 + $size = getimagesize($yes_img_path);​
 + $yes_img = "&​nbsp;<​img src=\"​{$yes_img_path}\"​ alt=\"​yesterday\"​ {$size[3]}>";​
 +
 + echo '<a title="'​.$title.'">'​.$total_count_str . $today_img . $today_count_str . $yes_img . $yes_count_str.'</​a>';​
 +}
 +
 +//  カウント数とパスを与えて、IMGタグを返す
 +function outhtml($f_cnt,​$c_path) {
 + $size = getimagesize($c_path. "​0.gif"​); ​ //  0.gifからwidthとheight取得
 + for($i = 0; $i < strlen($f_cnt);​ $i++) { //  桁数分だけループ
 + $n = substr($f_cnt,​ $i, 1);          //  左から一桁ずつ取得
 + $i_tag .= "<​img src=\"​{$c_path}{$n}.gif\"​ alt=\"​{$n}\"​ {$size[3]}>";​
 + }
 +
 + return $i_tag;
 +}
 +?>
 +</​code>​
 +
 +==== /​lib/​tpl/​arctic/​footer.html ====
 +フッターの一番左に呼出しコードを追加しただけ。
 +<code php /​lib/​tpl/​arctic/​footer.html>​
 +<?php
 +/**
 + * Example footer include
 + *
 + * This file shows you how to use the include hooks. However I recommend to
 + * create your own complete new template instead. ​
 + */
 +require_once(DOKU_INC.'​lib/​counter/​counter.php'​);​
 +?>
 +<div align="​center"​ class="​footerinc">​
 +  <?php site_counter()?>​
 +  ​
 +  <?php tpl_license('​button',​ true)?>
 +
 +  <a target="​_blank"​ href="​http://​www.chimeric.de"​ title="​www.chimeric.de"><​img src="<?​php echo DOKU_TPL?>​images/​button-chimeric-de.png"​ width="​80"​ height="​15"​ alt="​www.chimeric.de"​ border="​0"​ /></​a>​
 +
 +  <a target="​_blank"​ href="​http://​jigsaw.w3.org/​css-validator/​check/​referer"​ title="​Valid CSS"><​img src="<?​php echo DOKU_TPL?>​images/​button-css.png"​ width="​80"​ height="​15"​ alt="​Valid CSS" border="​0"​ /></​a>​
 +
 +  <a target="​_blank"​ href="​http://​wiki.splitbrain.org/​wiki:​dokuwiki"​ title="​Driven by DokuWiki"><​img src="<?​php echo DOKU_TPL?>​images/​button-dw.png"​ width="​80"​ height="​15"​ alt="​Driven by DokuWiki"​ border="​0"​ /></​a>​
 +
 +  <a target="​_blank"​ href="​http://​www.firefox-browser.de"​ title="​do yourself a favour and use a real browser - get firefox"><​img src="<?​php echo DOKU_TPL?>​images/​button-firefox.png"​ width="​80"​ height="​15"​ alt="​do yourself a favour and use a real browser - get firefox!!"​ border="​0"​ /></​a>​
 +  ​
 +  <a target="​_blank"​ href="<?​php echo DOKU_BASE?>​feed.php"​ title="​Recent changes RSS feed"><​img src="<?​php echo DOKU_TPL?>​images/​button-rss.png"​ width="​80"​ height="​15"​ alt="​Recent changes RSS feed" border="​0"​ /></​a>​
 +
 +  <a target="​_blank"​ href="​http://​validator.w3.org/​check/​referer"​ title="​Valid XHTML 1.0"><​img src="<?​php echo DOKU_TPL?>​images/​button-xhtml.png"​ width="​80"​ height="​15"​ alt="​Valid XHTML 1.0" border="​0"​ /></​a>​
 +</​div>​
 +</​code>​
 +
 +{{tag>​php アクセスカウンター}}
 +
 +~~DISCUSSION~~
  
blog/2011/0411-1804.txt · 最終更新: 2016/02/15 18:45 (外部編集)
CC Attribution-Noncommercial-Share Alike 3.0 Unported
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0