・・・・・GetAnchor(document,'click',function(ev){処理内容});})();設定が終わったら全ての改行をやめて、この様に1行にしてすっきりさせても構いません。複数のページで使う場合は、外部ソースファイルなどにして読み込ませる方が便利です。]用意してあるCGIを使う場合は、環境に合わせてCGIの設定が必要。Perl版は1行目に自分のサーバーのPerlのパスを合わせます。例:#!/usr/local/bin/perlPHP版をCGIとして動作させる場合も1行目にphpのパスを追加で書き込みます。例:<?phpを#!/usr/local/lib/php<?php等に変更。php版は、モヂュールでもCGIでもphp5の指定が別途ある場合はそれを行ってください。php5で製作・確認していますので5なら確実です。CGIとして動かす場合はCGI拡張子に変更するか、.htaccessなどでphpをCGIとして登録。設定1保存用の文字コードを指定。設定2ログデータを保存するディレクトリを指定。ログデータ保存ディレクトリはパーミッションをファイル作成削除などが可能な状態に合わせてください。設定3ログファイルの拡張子です。データファイルはタブ区切りのテキストになっていますので、Excelで見ると見やすいです。設定4(Perl版のみ)日本語ライブラリの指定。jcode.pmモヂュールが使える場合は空にして置いてください。jcode.plを使う場合は、パス+ファイル名を指定してください。JavaScript側でencodeURI(Component)を使う場合は日本語部分がutf8でURLエンコードされて送られてきますのでjcode.plでは変換できません。CP.href;の様にエンコード無しの生データ送りにしてテストしてみてください。アンカーのタイトル指定に日本語を使うのをやめてください。設定5ここには解析ログ取るサイトのURLの共通部分を配列として設定します。このCGIはGETでログを取るのでどこからでも誰からでもデータを引き渡されてしまいます。悪戯し放題って事になります。その為、特定のサイトのURLから送られたデータにしか反応しないようにします。$myurls[0]に自分のサイトだけ設定してください。配列の番号を増やしながら必要なだけ登録してください。'https:/artemis.ac/';設定6ログを取りたくない閲覧者のホスト名を設定する事でログを取りません。'localhost';だけ残しておいてください。'tokyo.ocn.ne.jp';以上で設定は終わりです。CGIのパーミッションを実行可能755や700などにしてください。利用しているサーバーの指示に従ってください。localtime(time)をlocaltime(time+60*60*9)の様に(またはgmtimeを使う)秒単位で加算・減算してください。PHP版は38,39行目あたりの2箇所のtime()をtime()+60*60*9の様にtime()に秒単位で加算・減算してください。日付のフォーマットは付属の解析を使う場合は変更禁止です。両方とも同じ設定項目です。/viewer.cgi';の様に書き込んで置いてください。HTMLファイのMETAタグに使う文字コードを書いてください。取ったログのあるディレクトリを指定。以上を設定して設置するだけで、ログファイルの解析ができます。同じ場所においてください。この解析CGIはデータファイルを読み込むまでがCGI(サーバー側)の役目です。サーバーにはファイル読み込みの負担しかかかりません。自分のPCの方で解析を行いますので、データ件数が多いとPCの性能次第で表示するまでが重くなります。従って、IE4(6)またはNN6以上のブラウザが必要です。PCも処理速度が遅い物は件数によって負担がかかります。Ajaxを使えばもう少し楽に軽く出来ると思います。アンカーであればそのデータを取ってCGIにデータを渡しています。データ送信警告なしにCGIにデータを渡したりするのは画像オブジェクトのSRCでCGIを呼び出すのが一般的です。IMGタグでサイズを1*1にしてCGIで情報を取るのと似た様なものですね。esc_objは、万一オブジェクト不明の時にエラーがでない為の回避です。全てのブラウザの動作を把握してるわけでもないですし、今後仕様が変るケースなども考えての事。encodeURIComponentだけ使っています。コレが使えないほんの少し前のブラウザの場合は、生データを渡すようにしています。古いブラウザでも対応できるescapeメソッドはブラウザやバージョンによって動きが違います。解釈したり16ビット?の様なデータになったりして、解析側で戻すのが逆に面倒になるので使っていません。PHPのデコードとの互換性もないので生の方が楽なので。生データは日本人が普通日本語の環境で使ってる状態で日本のサーバーなら結構そのまま通用してしまいます。本当は正しくないのですが、結果的にうまく行くので・・・といった所に頼ってます。URL情報は基本的に日本語は無いのでで、重要な情報には問題はでにくいです。日本語.jpタイプのリンクに関してはPunycodeにしても対応ブラウザの場合、JavaScriptでも勝手に日本語にして送ってしまうので文字化けが発生する場合はちょっと使い辛いです。JavaScriptからのCGIへのデータ受け渡しに関しての注意は、QUERYのライン上でURLを最後にしてる点です。分解する指標になる文字列を持ってしまっています。アフィリエイトリンクの飛ばし先なのか?がわからず、分解して良いのか良くないのかわからなくなります。末尾にする事でURL=以降を分解しないと言う事が容易にできます。キー部分は常に送られるようにラインの方に書き込まれています。]基本的に私がCGIに始めて触れたレスキューさん仕込みのわかりやすい記述になってると思います。このCGIはGETでデータを取る物ですのでサブルーチンrefcheckは必須です。split(/&/,$QUERY,4);直前述のJavaScriptからのCGIへデータ受け渡しのラインでURLを末尾にしてるので『&』で4分割しています。URLがアフィリエイト用の物だともっと分解されてしまうので4分割固定です。『=』で2分割に固定しておきます。コレもvalueがアフィリエイト用のURLだと『=』を複数含む可能性があるので。日本語ライブラリはjcode.plも使えるようにしてありますが、基本はjcode.pmで考えています。jcode.plはUTF-8に対応してないので、JavaScriptの方のencodeURIに対応できません。データ保存される文字列は1行に保存されます。JavaScriptなどから渡されたGETのQUERYがcmd=javascriptpagename=取出したページ名(タイトル)linkname=取出したアンカーのタイトル指定url=アンカーのhrefにあるURLとなりますのでこれらを分解デコードした物をタブで区切って保存しています。時間[\t]リンクURL[\t]リンク名[\t]ページURL[\t]ページ名[\t]ブラウザ[\t]ホスト[\t]IPアクセス解析ではこのログを、タブで分割すれば分析用データして使えます。]PerlのCGIとほとんど同じコーディングしていますのでPerlの方も参照してください。そのURLラインまで分解されてしまっているので、$_GETは使わずにPerlと同じようにQUERYで入力データを取ります。explode('&',$QUERY,4);Perlと同じように入力データを取っているので、4分割して必要なデータの形にします。4分割の理由はPerlの方に書いてあります。explode('=',$value,2);これもPerlと同じ2分割固定で行います。]CGI自体は画面フレーム作りと、リスト作り、ファイルの読み込みだけしています。解析は遊びとしてJavaScriptでデータ集計するようにしてあります。JavaScriptは、作成中に他の方法が思いつかなかったのでかなりの多重配列で無駄に複雑になっています。良い方法があれば自分で作り変えてください。直接リンクアンカーに埋め込んで確実にログを取る事もできるようにしてあります。(JavaScript式と併用しないでください。]CGIの設置はJavaScriptの方と同じです。リンクのの整理名&url=リン先のURLと言う形でCGIを間にかませて、必要な情報を入れ込んでリンクしてください。cmd=directと言う形でCGIが呼び出されると、ログを取った後にurlに設定されているリンク先に自動的に飛ばします。簡単なCGIですからエラーが起きない限り時間的ロスもほとんどありません。場合によっては文字化けする場合があります。文字化けする場合は半角英文字を使うか、エンコード(下で提供)した日本語を記述してください。リンク先URLは日本語は含まれていないのでそのままで良いです。リンク先URLが汎用ドメイン(日本語ドメイン)の場合は、必ずPunycode(xn--xxxxxxx.jpの形式)に変換して記述してください。このdirect型の場合はURLラインのデコードをしません。日本語ドメインの場合punycode指定でもIEでは時々うまく行かないことがあります。NN系は問題ありません。配布素材以外のコンテンツの無断使用・転載を禁じます。