転載・引用について

ユーザ用ツール

サイト用ツール


tweet:2009:0207_03

My access counter

view counterをInstallしたが、色々気に入らないので、まずはcounterを直してみた。

方針は、

  1. 今日のunique viewerの表示 → 1
  2. 今日のall viewerの表示 → 2
  3. 今までのunique viewerの合計 → 3
  4. 今までのviewerの合計 → 4

を表示すること。

高々これだけでも結構面倒。少しPHPを勉強する気になった。

以下、Install方法

  1. [DokuWiki Data Dir]/pages/_views を作成(普通は[DokuWiki Dir]/data/_viewだろう)
    • Ownerをuser.wwwにするならpermissionを775に www.wwwなら755にする
    • ここに各namespace毎の参照記録が配置される
    • file formatは以下の通り
      • Filename: namespace
      • Data Format: 1 2 3 4 Today ¥n <IP Address>¥n….
  2. [DokuWiki Dir]/inc/counter.phpを設置
    • <?php
       
      /* 
       * DokuWiki Counter
       * Original: Dokuwiki:plugins:viewcounter
       * Revised by seirios@seirios.org.
       * log: 2009/02/07 First Revision
       *
       * Function: Print view counter of followings.
       *     - Today's unique viewers
       *     - Today's all viewers
       *     - Total of "Today's unique viewers"
       *     - Total viewers
      */
       
      global $ID, $ACT;
      $views_str    = "views";
      $myip         = "<".$_SERVER["REMOTE_ADDR"].">";
      $ips          = "";
      $unique       = true;
      $todayviews   = 1;
      $utodayviews  = 1;
      $allviews     = 1;
      $uallviews    = 1;
      $d            = date("Ymd");
       
      $file = realpath($conf["datadir"])."/_views/".$ID;
       
      if (file_exists($file)) {
          $content = file_get_contents($file);
          $pos  = strpos($content, " ");
      
          if ($pos !== FALSE) {
              $todayviews  = substr($content, 0, $pos);
              $str         = substr($content, $pos + 1);
              $pos         = strpos($str, " ");
              $utodayviews = substr($str, 0, $pos);
              $str         = substr($str, $pos + 1);
              $pos         = strpos($str, " ");
              $allviews    = substr($str, 0, $pos);
              $str         = substr($str, $pos + 1);
              $pos         = strpos($str, " ");
              $uallviews   = substr($str, 0, $pos);
              $str         = substr($str, $pos + 1);
              $pos         = strpos($str, " ");
      
              if ($pos !== FALSE) {
                  $old_d = substr($str, 0, $pos);
                  $ips   = substr($str, $pos + 1);
      
                  if ($old_d != $d) {
                      $todayviews  = 1;
                      $utodayviews = 1;
                      $ips   = "";
                  } else if (strpos($ips, $myip) !== FALSE) {
                      ++$todayviews;
                      ++$allviews;
                      $unique = FALSE;
                  } else {
                      ++$todayviews;
                      ++$utodayviews;
                      ++$allviews;
                      ++$uallviews;
                  }
              }
          }
      }
      
      if (($ACT == "show") && ($INFO["exists"])) {
          if ($unique !== FALSE) {
              $ips.="\n".$myip;
          }
      
          $content = $todayviews." ".$utodayviews." ".$allviews." ".$uallviews." ".$d." ".$ips;
          file_put_contents($file, $content);
      }
      
      $fn.=" : Counter: ($todayviews / $utodayviews / $allviews / $uallviews $views_str) ";
      
      ?>
            
  1. [DokuWiki Dir]/inc/template.phpを修正
    • 以下のpatchを適用する
    • # diff -c ./template.php.orig ./template.php
      *** ./template.php.orig Sat Feb  7 14:15:51 2009
      --- ./template.php      Sat Feb  7 14:36:51 2009
      ***************
      *** 945,950 ****
      --- 945,951 ----
        
          // print it
          if($INFO['exists']){
      +     include("counter.php");
            $out = '';
            $out .= $fn;
            $out .= ' &middot; ';
      
            

取りあえずこれだけで最小限のカウンターが、ページ最下部に表示されます。

このカウンターでは、ちっとも目立たないので、そこをどう修正するかが今後の検討課題ですね。

このウェブサイトはクッキーを使用しています。 Webサイトを使用することで、あなたはあなたのコンピュータにクッキーを保存することに同意します。 また、あなたはあなたが私たちのプライバシーポリシーを読んで理解したことを認めます。 同意しない場合はウェブサイトを離れてください。クッキーに関する詳細情報
tweet/2009/0207_03.txt · 最終更新: 2009/02/07 03:00 by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki