人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

「アクセス解析を作る」

自分でアクセス解析を作ってみたいと思っています。ページごとのアクセス数を見るだけなら既存のサービスでいいのですが、「データを加工して再利用」したいのです。

利用例)
・ページごとのアクセスランキングを算出
・アクセス数によってページのデザインを変更
これはあくまで一例です。

できれば自作したくありません。既存のサービスにカウントはさせて、そのログを自作スクリプトで解析して再利用・・という流れがベストです。

しかしアクセス解析の仕組みがわかっていませんので、そのような事ができるのかどうかわかりません。ちなみにPHPとMySQLしかできません。

漠然とした質問ですが、取っ掛かりとなるような情報を求めています。

みなさんよろしくお願いします。

●質問者: tokyosmash
●カテゴリ:インターネット ウェブ制作
✍キーワード:MySQL PHP アクセス アクセス数 アクセス解析
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● V-C
●80ポイント ベストアンサー

某アクセス解析スクリプトを改造して、私のサイトで使っているアクセスログの収集スクリプトです。

<?php
class get_log{
function get_log(){
// 時刻($hour,$now)
$now = date("H:i:s");
$hour = date("H");

// ホスト名($host)
$addr = $_SERVER["REMOTE_ADDR"];
$host = $_SERVER["REMOTE_HOST"];
if ($host == $addr || $host == '') { $host = $addr;}
$host = strtolower($host);

// リファラ($ref)
$ref = $_SERVER["HTTP_REFERER"];
$ref = ereg_replace("%7E","~",$ref);
$ref = ereg_replace(",","%2C",$ref);
if(ereg("colordic",$ref)){$ref = "";}

// アクセス先($acc)
$acc = $_SERVER["REQUEST_URI"];
$acc = ereg_replace("%7E","~",$acc);
if (ereg("file:",$acc)) { $acc = ""; }

// ブラウザ名($hua)
$agnt = $_SERVER["HTTP_USER_AGENT"] ;
$agnt = ereg_replace("<","&lt;",$agnt);
$agnt = ereg_replace(">","&gt;",$agnt);
list($hua,$hua1,$hua2,$hua3) = split('/',$agnt);
if (ereg("MSIE",$hua1)) {
list($dummy,$ver) = split("MSIE",$hua1);
list($ver,$dummy) = split("\;",$ver);
$hua ="Internet Explore $ver";
}
elseif (ereg("Gecko",$hua1)) {
list($dummy,$hua2) = split(" ",$hua2);
list($ver,$dummy) = split("\(",$hua3);
$hua ="$hua2 $ver";
}
elseif (ereg("Opera",$hua)) {
list($ver,$dummy) = split(" ",$hua1);
$hua ="$hua $ver";
}
else {
list($ver,$dummy) = split(" ",$hua1);
$hua = "$hua $ver";
}

// OS($os)
if(ereg("Win(.*)(95|98|NT)",$agnt,$os)){$os=$os[2]; $os = "Windows $os";}
elseif(ereg("Mac|PPC",$agnt,$os)){ $os = "Macintosh"; }
elseif(ereg("Linux|SunOS|X11|BSD",$agnt,$os)){ $os = "UNIX"; }
else {$os = ""; }
$this->logdata = "$hour,$ref,$acc,$host,$hua,$now,$os";
}

function save_log(){
$dir = $_SERVER["DOCUMENT_ROOT"]."/log/";
$log = $dir.date("Ymd").".csv";
if (!$fp = fopen($log,"a")){ echo "LOG_OPEN_ERROR";}
flock($fp,LOCK_EX);
fwrite($fp,"$this->logdata\n");
flock($fp,LOCK_UN);
fclose($fp);
chmod($log,0666);
}
}//class_end
?>

参考になれば。

◎質問者からの返答

ご丁寧にありがとうございます。

これは大変参考になります。


試しに使ってみたいのですが、こちらのスクリプトをrequre_onceで呼び出せば

/log/~~.csv

に記録されるという事なのでしょうか?

スクリプト最後のsave_log()以下がちょっとよくわかりません。もしよろしければご教授ください。


2 ● V-C
●80ポイント
$dir = $_SERVER["DOCUMENT_ROOT"]."/log/";
$log = $dir.date("Ymd").".csv";

ログを保存するディレクトリを/log/にし、保存するファイル名を年月日.csv(ex.070509.csv)のようなフォーマットに設定。

if (!$fp = fopen($log,"a")){ echo "LOG_OPEN_ERROR";}
flock($fp,LOCK_EX);
fwrite($fp,"$this->logdata\n");
flock($fp,LOCK_UN);
fclose($fp);
chmod($log,0666);

この部分はファイル保存でよく使われるスクリプトです。ファイルを作成し、書き込みをし、パーミッションの設定をしています。

includeして

$obj = new get_log();
$obj->save_log();

でログを記録するはずです。

◎質問者からの返答

ありがとうございます。

無事にログ収集することが出来るようになりました。

今度はログの解析ですね。

新しく質問していますので、もしよろしければまたアドバイス下さい。

今回の質問は非常に勉強になりました。やはり具体的にスクリプトを頂けると勉強の効率がいいです。ご丁寧にありがとうございました!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ