PHP サンプル・プログラム- 連想配列のソート

| コメント(0)

アクセスログの並び替え

ページ毎のアクセスがどうなっているのかを表示するプログラムがあります。
これはページを作成した日順に表示しますので、どのページにアクセスが多いのか、特定のページへのアクセスはどうなのかを見たいときに、探すにの苦労して見たい表示となっていません。

はじめにアクセスログの内容がどうなっているのかを調べます。
テキストファイル形式でページ名と現在までのアクセス件数がTABキーでつないで保存されています。これだけ分かれば名前順でソートしたり、アクセス件数の多い順にファイル内容を書き換えることは容易ですね。

今回試作したプログラムの概要をご紹介します。
(PHPで作成していますので、 をお忘れなく!)

【A. アクセス件数の多い順プログラム】
ログの2番目の項目で降順ソートをしますので、連想配列にいれてソートします。

1.ファイルの読み込み

define('_FILEDIR', '/var/www/xxx/dir/'); // システムに合わせる
$separator = "\t" ; // ログファイルの区切り文字はタブです

$accfile = _FILEDIR.'hcnt4.dat' ; // ログファイル名
$lines = file($accfile); // ログファイルを開き、読み込みます

2. 連想配列に変換

for ($i=0; $i list ($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);
}

ちょっとしたプログラムで使い勝手が向上しました。
オリジナルのプログラム修正がありませんので、実に気楽にできます(笑)

コメントする

最近のブログ記事

Windows XPのOutlook Express 6.0 のスペルチェック
近所の会社の社長さんは Windows …
白菜の花
畑は春の陽気ですね。2/23以降朝の冷え…
css - リストの黒丸や四角の黒などが表示できない
比較的簡単なページを作成しています。リス…

おすすめ