トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

WEBプログラミング2004/11/24

第6回目 アクセス集計

 手順

  1. ファイルを開く
  2. CSVファイルからデータを読み込み、連想配列を使ってデータの個数をカウントする
  3. ファイルを閉じる
  4. 連想配列からデータを取り出し、HTML形式に変換し表示する。

以下の5項目を集計し、表示する。

  • 日付別
  • 時間別
  • ブラウザの種類別
  • OSの種類別
  • IPアドレス

 CSV形式ファイルからのデータの読み取り

  1. 関数fgetcsv()を使う。この関数戻り値配列
  2. 関数list()を使い、fgetcsv()の戻り値(配列)を変数に代入
  3. 変数値の連想配列のキーとして利用する

 PHP配列

Cなどの言語の配列は添え字に整数値を持ち、領域が連続しています。PHP配列ハッシュを使ったもので領域が連続していません。このような配列連想配列といいます。[1]

PHP配列は添え字には数値あるいは文字列を使います。

たとえば、Windows XPの個数を連想配列でカウントするときは次のように書きます。

$OS["Windows XP"]++;

この例のように添え字に文字列を利用できます。この添え字をキーといい、例のように"で囲んだ文字列や変数関数も利用できます。

$OS[$key];

 連想配列を参照する

連想配列を処理するときにはforeach()文を使います。

連想配列$OSの値だけを表示する。

foreach($OS as $value){
  echo $value;
}

連想配列$OSのキーと値の両方を表示する

foreach($OS as $key=>$value){
  print "$keyは$value<br>";
}

テーブルで出力する

<table>
<tr>
  <th>OS</th><th>件数</th>
</tr>
<?php
foreach($OS as $key=>$value){
  print "<tr>";
  print "<td>$key</td>";
  print "<td>$value</td>";
  print "</tr>";
}
</table>

 文字列の切り出し

文字列$strのある位置xからl文字分の文字列を取り出すにはsubstr関数を使う。この関数戻り値は文字列である。

$v = substr($str, x, l)

文字列は0から数え始めることに注意する。たとえば、文字列2004/12/01 15:35:00から日時と時間を取り出すときは次のようにする。

$hidike = substr($date, 5, 5);
$ji = substr($date, 11, 2);

 集計用プログラムの概要

// ファイルを読み取り専用でオープン
$fp = fopen("info.dat", "r");
// データファイを1行ずつEOFまで読み込む
while(list($date, $agent, $ipaddr) = fgetcsv($fp, 1024)){
  // CSVファイルを読み込み、処理するプログラムを書く
  // 月日の切り出しと連想配列のインクリメント
  // 時間の切り出しと連想配列のインクリメント
  // ブラウザの判別と連想配列のインクリメント
  // OSの判別と連想配列のインクリメント
}
fclose($fp);
// foreach分を使って連想配列の内容を表示する