アクセスログの並び替え
ページ毎のアクセスがどうなっているのかを表示するプログラムがあります。
これはページを作成した日順に表示しますので、どのページにアクセスが多いのか、特定のページへのアクセスはどうなのかを見たいときに、探すにの苦労して見たい表示となっていません。
はじめにアクセスログの内容がどうなっているのかを調べます。
テキストファイル形式でページ名と現在までのアクセス件数がTABキーでつないで保存されています。これだけ分かれば名前順でソートしたり、アクセス件数の多い順にファイル内容を書き換えることは容易ですね。
今回試作したプログラムの概要をご紹介します。
(PHPで作成していますので、 をお忘れなく!)
【A. アクセス件数の多い順プログラム】
ログの2番目の項目で降順ソートをしますので、連想配列にいれてソートします。
1.ファイルの読み込み
define('_FILEDIR', '/var/www/xxx/dir/'); // システムに合わせる
$separator = "\t" ; // ログファイルの区切り文字はタブです$accfile = _FILEDIR.'hcnt4.dat' ; // ログファイル名
$lines = file($accfile); // ログファイルを開き、読み込みます
2. 連想配列に変換
for ($i=0; $ilist ($key, $val) = explode ($separator, $lines[$i]);
$data[$key] = $val ;
}
3. アクセス件数の大きい順ソート
arsort($data,SORT_NUMERIC);
4. データをファイル形式に戻す
foreach ($data as $key=>$val){
$dest[]=$key . $separator . $val ;
}
5. ソート済みファイルの書き込み
if(is_writable($accfile)) {$fp = fopen($accfile, "w") ;
set_file_buffer($fp,0) ;
flock($fp,2);
fputs($fp, implode('',$dest)) ;
fclose($fp);echo "Done." ;
} else {
echo "Failed" ;
}
【B. ページ名順プログラム】
ログの一番目の項目がページ名となっていますので、そのままソートします。
1. アクセスログ・ファイルの読み込み
define('_FILEDIR', '/var/www/xxx/dir/'); // 各システムに合わせます
$accfile = _FILEDIR.'hcnt4.dat' ; // アクセスログ・ファイル
$lines = file($accfile);
2. ソート
sort($lines);
3. ソート済みファイルの書き込み
if(is_writable($accfile)) {$fp = fopen($accfile, "w") ;
set_file_buffer($fp,0) ;
flock($fp,2);
fputs($fp, implode('',$lines)) ;
fclose($fp);
}
ちょっとしたプログラムで使い勝手が向上しました。
オリジナルのプログラム修正がありませんので、実に気楽にできます(笑)
コメントする