ポンクソフト

アクセス解析3 - PHPでアクセスカウンタ&解析

前ページ PHPでアクセスカウンタ&解析 TOP 次ページ

目次

  1. PHPでアクセスカウンタ&解析
  2. テキストカウンタ
  3. 画像カウンタ
  4. アクセス解析1
  5. アクセス解析2
  6. アクセス解析3
  7. アクセス解析4

アクセス解析3

アクセス解析の一例として、アクセスされた回数が最も多い日でソートして表示します。さらに、棒グラフを使ってビジュアル的な表現をしてみます。

ページの作成

まずカウンタを表示するページを作成します。page1.php を開き
あなたは<?php require "counter1.php" ?>人目のお客様です。
の部分を
あなたは<?php require "counter5.php" ?>人目のお客様です。
に書き換えて「page5.php」という名前でサーバにアップしてください。

カウンタプログラムの作成

次にアクセスカウンタのプログラムを作成します。以下のソースを入力してください。
<?php
// アクセスカウンタ5

if ($_GET['log'] == 'yes') {
  print "<html><body>\n";
  $logs = file("log.txt");
  $dates = array();
  foreach ($logs as $l) {
    $l = rtrim($l);
    list($datetime, $agent) = explode("\t", $l);
    list($date, $time) = explode(" ", $datetime);
    array_push($dates, $date);
  }
  $ranks = array_count_values($dates);
  arsort($ranks);
  print "<table border='1'>\n";
  foreach ($ranks as $k => $v) {
    $w = $v * 10;
    print "<tr>";
    print "<td>$k</td>";
    print "<td><table><tr>";
    print "<td width='$w' bgcolor='green'> </td>";
    print "<td>$v 件</td>";
    print "</tr></table></td>";
    print "</tr>\n";
  }
  print "</table>\n";
  print "</body></html>\n";
  exit();
}

$fp = @fopen("counter5.txt", "r+") or die("Counter Error");
flock($fp, LOCK_EX);
$count = fgets($fp);
$count++;
rewind($fp);
fputs($fp, $count);
fclose($fp);

$log = date("Y/m/d H:i:s") . "\t";
$log .= $_SERVER['HTTP_USER_AGENT'] . "\n";
$fp = @fopen("log.txt", "a") or die("Log Error");
flock($fp, LOCK_EX);
fputs($fp, $log);
fclose($fp);

print "<a href='counter5.php?log=yes'>$count</a>";
?>
入力が終わったら「counter5.php」という名前でサーバにアップします。

カウンタファイルの作成

次に先ほどと同じくアクセスカウントを保存するためのファイルを作成します。新規テキストファイルを作成し
0
とだけ記述して(改行は入れない)、「counter5.txt」という名前でサーバにアップします。その後、FTPソフトの「属性変更」から「その他」に書込許可属性を与えます。

実行

以上の用意ができたら、page5.php をブラウザでアクセスしてみてください。カウンタのリンクをクリックすると、アクセス解析の結果が表示されます。

counter5.php ソースの解説

$logs = file("log.txt");
ログファイル log.txt の内容を一行ずつ配列 $logs に格納します。
$dates = array();
配列 $dates を定義しています。この配列にはログファイルの日付が入ります。
foreach ($logs as $l) {
配列 $logs から一行ずつ取り出して $l に代入しつつループします。
    $l = rtrim($l);
    list($datetime, $agent) = explode("\t", $l);
    list($date, $time) = explode(" ", $datetime);
    array_push($dates, $date);
ログ一行のデータから、まず終端の改行を除き、タブ区切りによって項目を分けます。次に日時 ($datetime) のデータをスペースで分割し、日付と時刻に分割します。そして取り出した日付を配列 $dates に格納して行きます。
  $ranks = array_count_values($dates);
  arsort($ranks);
日付の出現回数を数えた配列を、値の降順でソートし、出現回数の多い順に並び替えています。
  print "<table border='1'>\n";
  foreach ($ranks as $k => $v) {
    $w = $v * 10;
    print "<tr>";
    print "<td>$k</td>";
    print "<td><table><tr>";
    print "<td width='$w' bgcolor='green'> </td>";
    print "<td>$v 件</td>";
    print "</tr></table></td>";
    print "</tr>\n";
  }
  print "</table>\n";
各日付のアクセス数を棒グラフにして出力している部分です。
$w は某グラフの長さ(ピクセル数)です。出現回数×10に設定しています。棒グラフはテーブルのセルの長さ (td width) を指定して背景色 (td bgcolor) を変えて表現しています。テーブルの中にさらにテーブルを作り棒グラフを描画しています。
前ページ PHPでアクセスカウンタ&解析 TOP 次ページ
このエントリーをはてなブックマークに追加 そっか0

このページに関するコメントをどうぞ

お名前:



すごく参考になりました!
ありがとうございます。
2017/03/30 09:47

名無しのリーク
香川県ルーちゃん餃子のフジフーヅはバイトにパワハラの末指切断の大けがを負わせた犯罪企業
2017/03/29 23:34

高級時計 ブランド レディース
特恵中-新作入荷!
当社の商品は絶対の自信が御座います
迅速、確実にお客様の手元にお届け致します
実物写真、付属品を完備しております。
低価格を提供すると共に、品質を絶対保証しております
ご注文を期待しています
2017/03/28 18:37

カルティエ ソリテール
ブランドコピーブランドN級品専門店
史上最も激安ブランドブランドコピー-即日 配送可,100%入荷。
当店は正規品と同等品質は品質3年保証でご注文から5 日でお届け致します。
レディースとメンズ激安通販専門店!品質と本物は同様です。
全て新品、高い品質、激安 、送料は無料です( 日本全国)すべての商品は品質2年無料保証です。
ブランドコピー時計:
2017/03/24 14:04

カリマー
解りやすくて、とてもいいサイトですね!
phpは初心者ですが、最後まで到達できるよう頑張ります!
2017/03/23 04:03


ああああ
2017/03/23 00:54

オメガ ボーイズ
★2017最高等級新しい商品大量入荷!
■在庫情報随時更新!(*^-^*)
■信用第一、良い品質、低価格は。
★歓迎光臨★送料無料(日本全国)
ご注文を待ちしております
よろしくお願いいたします_(._.)_
2017/03/22 09:09


テスト
2017/03/21 14:02

ゆうた
かりんがすき
2017/03/17 14:36

saraebo
別windowsとして実装することなく、actionのphpで、コマンドとするデータベース等の更新で、その結果をクライアントに返さない(homeページの元画面は変わらない。)とする事はできるのでしょうか?
2017/03/17 12:09

残りを読む »