投稿日:2002年06月08日 作成鷹の巣

No.3570 index.html以外の直リンクページのCGIカウント方法は?



index.html以外の直リンクページのCGIカウント方法は?

No.3570 投稿時間:2002年06月08日(Sat) 18:49 投稿者名:牛島 URL:

鷹の巣さんを参考に自宅サーバーを構築できました。ありがとうございます。

CGIのカウンタも鷹の巣さんと同じ、ケントwebさんのDAY COUNTER-EX v3.3にしました。
私も鷹の巣さんにならって、index.html→子1.html→mokuji.html→子2.html→mokuji.htmlのような流れにして、
index.htmlの訪問者数をカウントをしようと思います。
でもこれって、子1.htmlに直リンクされた場合にindex.htmlのページに行かないですから、カウントされませんよね。
これをカウントする方法がありましたら教えて下さい。


CGIカウンタの二重カウント防止対策とその改造案。

No.3571 投稿時間:2002年06月08日(Sat) 20:15 投稿者名:鷹の巣 URL:http://sakaguch.com/

> CGIのカウンタも鷹の巣さんと同じ、ケントwebさんのDAY COUNTER-EX v3.3にしました。
> 私も鷹の巣さんにならって、index.html→子1.html→mokuji.html→子2.html→mokuji.htmlのような流れにして、
> index.htmlの訪問者数をカウントをしようと思います。
> でもこれって、子1.htmlに直リンクされた場合にindex.htmlのページに行かないですから、カウントされませんよね。
> これをカウントする方法がありましたら教えて下さい。


以下のリンクをご覧になって下さい。
1. http://sakaguch.com/cgi/count/dayxmgr.cgi <----------- index.htmlに設置したカウント数
2. http://www.pvranking.com/rank/site.asp?ID=4791 <------ ページビューランキングのカウント数
2のカウント数は、寿命が24時のクッキーを使用したカウント数で、非固定IPアドレスユーザーのIPアドレスが変っても一日に1ユーザー1カウントです。
クッキーを受け入れるユーザーしかカウントしませんが、厳密に言いますとこれが一日の訪問者数ということになります。

私もmokuji.htmlの保守が面倒になってきましたので、
index.html→子1.html→index.html→子2.html→index.html→子3.htmlのような流れにしようと考えています。
(近日中に実施する予定です。)
勿論、index.html→子1.html→子2.html→子3.htmlのような流れも残します。

残念ながら、kent-webさんのDAY COUNTER-EX v3.3というカウンタは、一つ前のIPアドレスしか保持されておらず、
この様なIPアドレスによる二重カウント防止機能は、リロード程度しか役に立ちません。

重複カウントをある程度、防止するには、IPアドレスをある程度溜め込んでおいて置く様に改造されては、如何でしょうか。
(クッキーは、使用しませんので、非固定IPアドレスの方で、IPアドレスが変って再訪問される方は、二重カウントされます。)


以下にkent-webさんのDAY COUNTER-EX v3.3の改造案を示します。改造は、全て追加です。(コメントアウト可能な箇所もありますが。)
注)IPアドレス記録ファイルの"ipa.dat"は、予め、空ファイルを作成しておいて下さい。
  "ipa.dat"が存在しない場合、エラーになり、カウント表示されなくなります。(エラー処理は、めんどくさいので入れていません。)
  私は、C言語もperl言語もプログラミング出来ません。以下の改造案は、全くデバックしておりませんので、自己責任の上で実施願います。
  もし、下記の改造の内容が理解出来ない場合は、「とほほのperl入門」(http://www.tohoho-web.com/wwwperl.htm)を
  ご覧になり、内容を読んで、改造デバッグして下さい。


# うまく動いたら、是非、ご連絡願います。私も明日デバッグしてみます。



#!/usr/local/bin/perl

#┌─────────────────────────────────
#│  DAY COUNTER-EX v3.3 (2001/10/20)
#│  Copyright(C) KENT WEB 2001
#│  webmaster@kent-web.com
#│  http://www.kent-web.com/
#└─────────────────────────────────

.....中略.....

#============#
#  設定項目  #
#============#

.....中略.....

# IPアドレスの二重カウントチェック
#   0 : チェックしない
#   1 : チェックする
$ip_check = 1;

# ----------------改造開始-----------------

# IPアドレス記録数で指定したIPアドレスは、記録されカウントされません。
# 従って、自サイトのURLから、カウンタを設置しているトップページに
# 戻ってくるカウントを防止出来ます。

# IPアドレス記録ファイル
$ipalogfile = "./ipa.dat";

# IPアドレス記録数(2以上でないと機能しません。)
$ipa_num = 100; <--------------- 1日の総カウント数の約10分の1を目安にしますと、2時間程度のIPアドレスを溜め込むことが出来ます。

# LAN 内のプライベートセグメントアドレス(192.168.1.0)を設定して、
# LAN 内からのアクセス(192.168.1.*)に対して、カウントされないようにします。
$PrivateSegAddr = '192.168.1.0'; <--------------- 分からなければ、ルータやクライアント機のIPアドレスを入力して下さい。

# ----------------改造終了-----------------

#============#
#  設定完了  #
#============#


.....中略.....



# IPチェック
$flag=0;
if ($ip_check) {
	$addr = $ENV{'REMOTE_ADDR'};
	if ($addr eq "$ip") { $flag=1; }

	# ----------------追加改造開始-----------------
	# LAN 内のプライベートセグメントアドレス(192.168.1.0)を設定して、
	# LAN 内からのアクセス(192.168.1.*)に対して、カウントされないようにします。
	if (pack("C3", split(/\./, $addr)) eq pack("C3", split(/\./, $PrivateSegAddr))) { $flag=1; }

	if (!$flag && $ipa_num > 1) {
		# IPアドレス記録データの読み込み
		open(IN,"$ipalogfile") || &error;
		$ipadata = <IN>;
		close(IN);
		# IPアドレス記録ファイルを分解して、配列に格納
		@ipa[0..$ipa_num - 2] = split(/<>/, $ipadata);
		# IPアドレスチェック(アクセスしたIPアドレスが存在したら、カウントしない)
		foreach (@ipa) {
			if ($_ eq $addr) { $flag=1; last; }
		}
	}
	if (!$flag) {
		# アクセスしたIPアドレスが存在しなかったら、
		# IPアドレスを追加して、記録ファイル様式に変換
		$ipa = $addr . '<>';
		foreach (@ipa) { $ipa .= $_ . '<>'; }
		# IPアドレス記録ファイルを更新
		open(OUT,">$ipalogfile") || &error;
		print OUT $ipa;
		close(OUT);
	}
	# ----------------追加改造終了-----------------

}


うまく動きました。

No.3574 投稿時間:2002年06月08日(Sat) 21:58 投稿者名:牛島 URL:

> 以下のリンクをご覧になって下さい。
> 1. http://sakaguch.com/cgi/count/dayxmgr.cgi <----------- index.htmlに設置したカウント数
> 2. http://www.pvranking.com/rank/site.asp?ID=4791 <------ ページビューランキングのカウント数
> 2のカウント数は、寿命が24時のクッキーを使用したカウント数で、非固定IPアドレスユーザーのIPアドレスが変っても一日に1ユーザー1カウントです。
> クッキーを受け入れるユーザーしかカウントしませんが、厳密に言いますとこれが一日の訪問者数ということになります。
たいへん勉強になりました。くわしく教えてもらってありがとうございました。

> 私もmokuji.htmlの保守が面倒になってきましたので、
> index.html→子1.html→index.html→子2.html→index.html→子3.htmlのような流れにしようと考えています。
> (近日中に実施する予定です。)
> 勿論、index.html→子1.html→子2.html→子3.htmlのような流れも残します。
私もこのようにしたいです。

> 以下にkent-webさんのDAY COUNTER-EX v3.3の改造案を示します。改造は、全て追加です。(コメントアウト可能な箇所もありますが。)
> 注)IPアドレス記録ファイルの"ipa.dat"は、予め、空ファイルを作成しておいて下さい。
> "ipa.dat"が存在しない場合、エラーになり、カウント表示されなくなります。(エラー処理は、めんどくさいので入れていません。)
> 私は、C言語もperl言語もプログラミング出来ません。以下の改造案は、全くデバックしておりませんので、自己責任の上で実施願います。
> もし、下記の改造の内容が理解出来ない場合は、「とほほのperl入門」(http://www.tohoho-web.com/wwwperl.htm)を
> ご覧になり、内容を読んで、改造デバッグして下さい。
URLありがとうございました。C言語もperl言語もプログラミング出来ませんというのは?

> # うまく動いたら、是非、ご連絡願います。私も明日デバッグしてみます。
感動です。この画面からカット&ペーストしたら一発でうまく動きました。
このような改造が1時間程度でできるんですか。信じられません。

> # IPアドレス記録数(2以上でないと機能しません。)
> $ipa_num = 100; <--------------- 1日の総カウント数の約10分の1を目安にしますと、2時間程度のIPアドレスを溜め込むことが出来ます。
$ipa_num = 5としてやってみました。IPアドレス記録ファイルの"ipa.dat"ファイルにちゃんと5つまでIPアドレスがはいっていて、この中にあるIPアドレスでアクセスするとカウントされないのを見ました。

こんなに早く解決できるとは。ありがとうございました。また質問するかもしれませんが宜しくお願いします。


デバッグありがとうございました。

No.3576 投稿時間:2002年06月08日(Sat) 22:52 投稿者名:鷹の巣 URL:http://sakaguch.com/

> > 以下にkent-webさんのDAY COUNTER-EX v3.3の改造案を示します。改造は、全て追加です。(コメントアウト可能な箇所もありますが。)
> > 注)IPアドレス記録ファイルの"ipa.dat"は、予め、空ファイルを作成しておいて下さい。
> > "ipa.dat"が存在しない場合、エラーになり、カウント表示されなくなります。(エラー処理は、めんどくさいので入れていません。)
> > 私は、C言語もperl言語もプログラミング出来ません。以下の改造案は、全くデバックしておりませんので、自己責任の上で実施願います。
> > もし、下記の改造の内容が理解出来ない場合は、「とほほのperl入門」(http://www.tohoho-web.com/wwwperl.htm)を
> > ご覧になり、内容を読んで、改造デバッグして下さい。
> URLありがとうございました。C言語もperl言語もプログラミング出来ませんというのは?


C言語もperl言語も標準関数の名前が全く頭に入っていません。時間をかければなんとか出来るといった超初心者レベルです。
すっかりwindowsのGUIに慣れてしまって、MS-DOSのコマンドやLinuxのコマンド等のパラメータも全く頭に入っていません。
改造は、全体の流れをぼんやりと見て、局所的に集中して行いますので、10行程上に書いてあるコードとほぼ同じことを書いたりして失敗も多いです。


> > # うまく動いたら、是非、ご連絡願います。私も明日デバッグしてみます。
> 感動です。この画面からカット&ペーストしたら一発でうまく動きました。
> このような改造が1時間程度でできるんですか。信じられません。


ご報告ありがとうございました。似たようなことを既に実施していまして、改造しやすいように
IPアドレス記録ファイルを別に作ったり、この記録様式を圧縮せずにテキストエディタで見やすくしただけです。
一から作るとなると半年ほどかかるかも知れませんよ。


> > # IPアドレス記録数(2以上でないと機能しません。)
> > $ipa_num = 100; <--------------- 1日の総カウント数の約10分の1を目安にしますと、2時間程度のIPアドレスを溜め込むことが出来ます。
> $ipa_num = 5としてやってみました。IPアドレス記録ファイルの"ipa.dat"ファイルにちゃんと5つまでIPアドレスがはいっていて、この中にあるIPアドレスでアクセスするとカウントされないのを見ました。


数を少なくするのは、デバッグの基本ですよね。ご立派です。デバッグありがとうございました。


|目次|掲示板|過去ログ目次|▲頁先頭|