Netsensor

特徴

    表示サンプル
  • このCGIスクリプトは、ホームページへの「アクセス解析」を行うものです。
  • SSIを使わず ←このような画像を使って CGIのみで動作します。使用する画像は任意のものに変更可能
  • ログをとる項目(* がついているものはJavaScriptを使って取得)
    1. ブラウザ名
    2. ホスト名
    3. 最近20日間におけるアクセス人数の推移
    4. アクセス時間帯
    5. アクセス曜日
    6. リンク元URL *
    7. JavaScriptが実行可能かどうか
    8. 画面解像度 *
    9. ウインドウサイズ *
    10. 発色深度 *
    11. ブラウザのフォントサイズ *
    12. ブラウザのフォントファミリー *
  • ロックファイル機構により、同時アクセスによるログ破損を極力防止します。
  • cookieを使っており、Ver 1.15 以上では、一定時間IPを記録しており、何度ページを更新してもカウントアップされません。
  • HTMLを元にしたスキンを使用することによって、グラフ表示する項目やレイアウトを自分で決定できます。 また、複数のスキンを切り替えて使用することができます。根性とやる気のある人は自分でスキンを作ることも可能です。
  • ログ観覧時にパスワードを設定して、一般の人に見られなくすることができます。
  • ログの件数に上限を設定することができます。
  • 画像からCGIを呼び出しているため、画像が表示できないブラウザではデータを取得できません。
  • 一つのスクリプトで複数ページのログをとることはできません。
  • ちょっと動作が重いです

利用規定

  • 当スクリプトの利用により、何らかの問題が発生しても、当方ではいっさい責任を持ちません。

動作環境

Windows98 + An HTTPd server + ActivePerl 5.6.1
FreeBSD + Perl 5.006

ダウンロード

Ver 1.15からログの形式が変わりました。新しいプログラムをそのままダウンロードして実行すると 自動的に以前のログを新しい形式に変換し、古いログを netsensor.txt.old というファイル名でバックアップします。
このスクリプトは W.S.C.R のランキングに登録されています。 もしお気に召しましたらランキングに投票していってください。
    入っているファイル
       netsensor.cgi    プログラム本体
       netsensor.pl     設定ファイル
       cgi-lib.pl       ライブラリ
       unescape.pl      ライブラリ
       netsensor.txt    ログファイル
       lately.txt       IPログ
       netsensor.gif
       
       oldlog /     [フォルダ]
       lockdir /    [フォルダ]
          lockfile  ロックファイル

       スキン
       skin.htm    browser.htm
       mac.gif     win.gif     graph.gif   unix.gif
       win20.gif   win95.gif   other.gif   winme.gif
       winnt.gif   win98.gif   winxp.gif


プログラムの修正

注意! ファイルの文字コードはすべてEUCです。メモ帳などで編集すると文字コードがShift_JISになってしまうので、秀丸エディタやK2EditorなどEUCに対応したエディタを使用してください。
  • netsensor.cgi を エディタで開いて修正します(スクリプトの文字コードはすべてEUCとして保存してください)。

    #!/usr/local/bin/perl
    プロバイダで規定されているPerlへのパスを記述します。プロバイダによってはusr/bin/perlだったりします。
  • netsensor.pl を エディタで開いて修正します(スクリプトの文字コードはすべてEUCとして保存してください)。

    $backurl = "http://";
    戻るURLを指定します。絶対パス、相対パスどちらも使えます
    $logfile = "./netsensor.txt";
    ログファイルのパスをサーバー内の相対パスで記述します。通常は修正の必要はないと思います。
    $imgfile = './netsensor.gif';
    $mimetype = 'image/gif';
    CGIをIMGタグで呼び出した際、表示させる画像です。Mime-Typeはその画像に合ったものを使用してください。
    GIFなら image/gif
    JPEGなら image/jpeg
    PNGなら image/png
    XBMなら image/x-xbitmap ←こんな形式使う人いるか?
    $usepass = 0;
    ログ観覧時にパスワードを必要とするか。1なら必要、0なら不要。
    $password = 'password';
    $usepass を 1とした場合のパスワード。字数は自由です。
    $logcut = 0;
    ログの件数に上限を設けるか?設けるなら1、設けないなら0
    $maxcount = 3000;
    上で1を指定した場合、最大件数
    $oldlog = "./oldlog/netsensor.bk";
    上で1を指定した場合、古いログをバックアップする際のファイル名。末尾に数字がつく。 フォルダはあらかじめ作っておくこと
    @ignorehost = ('localhost',
                   '127.0.0.1',
                   '',
                   '');
    この文字列がアクセス元ホストに含まれる場合はログを記録しない。自分のプロバイダーのホスト名などを記述してください。
    @noreferrer = ('',
                   '',
                   '',
                   '');
    この文字列が含まれるURLはリンク元に記録しない。複数登録可能
    $skinfile = "./skin.htm";
    標準のスキンファイル。URLで netsensor.cgi?skin=skin1.htm という風にスキンファイルを指定しなかった場合、 ここで指定したスキンファイルが使われます。
    $graphimg = './graph.gif';
    $g{'WinXP'} = './winxp.gif';
    $g{'WinMe'} = './winme.gif';
    $g{'Win2000'} = './win20.gif';
    $g{'WinNT'} = './winnt.gif';
    $g{'Win98'} = './win98.gif';
    $g{'Win95'} = './win95.gif';
    $g{'Win'} = './win.gif';
    $g{'MacOS'} = './mac.gif';
    $g{'UNIX'} = './unix.gif';
    $g{'OS/2'} = './other.gif';
    $g{'Dreamcast'} = './other.gif';
    $g{'i-mode'} = './other.gif';
    $g{'Other'} = './other.gif';
    グラフ用イメージ
    $h = 12;
    グラフの縦辺の長さ
    $max = 500;
    グラフの最大幅
    $r = 50;
    ブラウザの文書表示可能領域幅/高 の値の幅を指定。
    $latelyLength = 10;
    最新?件のデータ の?に相当する値。
    $dayLength = 20;
    過去?日間における訪問者数の推移 の?にあたる値。あまり大きな値にすると処理が遅くなります。
    $referrerLength = 25;
    リンク元の表示件数
    $lately_visitors_file = './lately.txt';
    最近の訪問者のIPを記録するファイル
    $no_log_minutes = 60;
    記録しておく時間(分)
  • ホームディレクトリ(ここでは public_htmlディレクトリとします)の下に、cgi-binディレクトリを作成し、上記のファイルをFTP転送します。全体のディレクトリ構成とファイル位置の設置例は以下のとおりです。(かっこ内はパーミッションの設定値)

      public_html / index.html (トップページ)
          |
          +-- cgi-bin[777] /
                     netsensor.cgi	[755]
                     netsensor.pl	[644]
                     cgi-lib.pl		[644]
                     unescape.pl	[644]
                     netsensor.txt	[666]
                     lately.txt		[666]
                     netsensor.gif	[644]
                 |
                 +-- oldlog [777] /
                 +-- lockdir [777] /
                             lockfile	[666]
                     その他		[644]
    
    ディレクトリは777、CGIプログラムは755、
    テキストファイルとロックファイル(lockfile)は666、
    その他のファイルはそのまま(644)です。
      

  • アクセスデータを取るページ(index.html)に、以下のHTMLコードを記述します。
    <SCRIPT language="JavaScript">
    <!--
    var src = "cgi-bin/netsensor.cgi?mode=log";
    src += "&screenWidth=" + screen.width;
    src += "&screenHeight=" + screen.height;
    src += "&colorDepth=" + screen.colorDepth;
    src += "&innerHeight=" + ((document.body.clientHeight) ? document.body.clientHeight : window.innerHeight)
    src += "&innerWidth=" + ((document.body.clientWidth) ? document.body.clientWidth : window.innerWidth);
    src += "&referrer=" + escape(document.referrer);
    src += "&fontSize=" + ((document.body.currentStyle) ? document.body.currentStyle.fontSize : "");
    src += "&fontFamily=" + ((document.body.currentStyle) ? escape(document.body.currentStyle.fontFamily) : "");
    src += "&script=1";
    src = "<img src=\"" +src+ "\" border=\"0\" width=22 height=22>";
    document.write("<a href=\"cgi-bin/netsensor.cgi\" target=\"_top\">" +src+ "</a>");
    //-->
    </SCRIPT>
    <NOSCRIPT>
    <a href="cgi-bin/netsensor.cgi"><img src="cgi-bin/netsensor.cgi?mode=log" border="0" width="22" height="22"></a>
    </NOSCRIPT>
    	

エラー時に出力される画像について

CGIスクリプトをIMGタグで呼び出した時、netsensor.gifではなく以下のような画像が表示される場合があります。 これはログ記録の際何らかのエラーが発生したことを意味します。 詳細は以下の通り。
白色ログファイルが開けない
赤色ファイルをロックできない
黄色IP記録ファイル lately.txt が開けない
黄緑IP記録一時ファイル lately.txt.tmp が作成できないか書き込めない
紫色ログの一時ファイルが作れない
灰色ログ記録時に表示させる画像が開けない
これらのエラーが発生したときは、該当ファイルが存在するか、パーミッションはあってるか、親フォルダに書き込み権や実行権はあるかといったことを確認してください。

スキンファイルについて

    スキンとなるHTMLファイルに特殊な文字列を記述すると、そこがCGIスクリプトによってデータの編集結果に置き換えられます。
    <!-- __%・・・%__ --> という文字列は、<TBODY> 〜 </TBODY> という文字列に置き換わります。
    また、ファイルは文字コードをEUCにして保存してください。
    具体的な記述は、プログラム付属のskin.htmのソースを見てください。


    定義されている文字列は以下のとおり。

    __%count%__全体のログ件数
    __%backurl%__戻るURL
    __%screencount%__画面解像度のログ件数
    __%innercount%__ウインドウサイズのログ件数
    __%depthcount%__発色深度のログ件数
    __%sizecount%__フォントサイズのログ件数
    __%familycount%__フォントファミリーのログ件数

    この文字列が記述されている行そのものが置きかわリます。
    <!-- __%lately_html%__ --> 最新?件の表示横6列
    <!-- __%os_html%__ --> OS横4列
    <!-- __%browser_html%__ --> ブラウザ横4列
    <!-- __%browserAll_html%__ --> ブラウザ(詳細)横3列
    <!-- __%script_html%__ --> JavaScript実行可能か横4列
    <!-- __%ip_html%__ --> IP横4列
    <!-- __%host_html%__ --> アクセス元のドメイン名横4列
    <!-- __%day_html%__ --> 最近20日間におけるアクセス人数の推移横22列
    <!-- __%hour_html%__ --> アクセス時間帯横26列
    <!-- __%wday_html%__ --> アクセス曜日横9列
    <!-- __%referrer_html%__ --> アクセス元横2列
    <!-- __%screen_html%__ --> 画面解像度横4列
    <!-- __%innerWidth_html%__ --> 文書表示可能領域幅横4列
    <!-- __%innerHeight_html%__ -->文書表示可能領域高横4列
    <!-- __%colorDepth_html%__ --> 発色深度横4列
    <!-- __%fontSize_html%__ --> ブラウザの文書観覧フォントサイズ横4列
    <!-- __%fontFamily_html%__ --> ブラウザの規定書体横4列
    <!-- __%copyright_html%__ --> スクリプトの著作権表示 

    また、スキンファイルは複数用意して切り替えて使うことが可能です。具体的には、
    http://www. 〜/netsensor.cgi?skin=skin2.htm
    というURLを呼び出すと、skin2.htmをスキンファイルとして読み込みます。


    また、パスワードのページはスキンを設定することはできません。 ただし、普通のHTMLファイルに「password」という名前のインプットボックスを作って netsensor.cgiにpost(getも可)してやるようにすればOK。

変更履歴

  • 2002/3/29 Ver. 1.20 公開
    • 無視するホストを設定できるようにした
    • エラー時に出力される画像を変更
    • フォント名が複数あった場合に、分割するようにした。
    • その他バグを修正
  • 2002/1/5 Ver. 1.16 公開
    • ローカルからのアクセスは記録しないようにした。
    • エラー処理を少し追加
  • 2001/12/29 Ver. 1.15 公開
    • ログファイルの形式を変更
    • Windows XP に対応
    • 内部的に多次元配列を使うようになった
    • 最近の訪問者数が設定したのより一つ少なく表示されていたのを修正
    • 最近の訪問者を記録するのに、Cookieを使うのをやめIPを一定時間保存する方式に変更
    • ブラウザ名を取得する正規表現をより一般的なものに
    • メモリを無駄に消費するようなコードを修正
    • 著作権表示にサーバーのOS名、Perlのバージョンも表示させるようにした
    • ファイルロックがうまく働いていなかったのを修正
    • グラフの長さを計算する式を変更(ちょっとパフォーマンスが落ちたかも)
    • 古いログのバックアップをとるようにした
    • ブラウザのフォント名の表示ができるようになった
    • その他バグ修正
  • 2001/08/26 Ver. 1.04 公開
    • 設定ファイルを別に。
    • ブラウザ名を取得する正規表現を一般的に
    • その他たくさんのバグ修正
  • 2001/03/25 Ver. 1.0 公開