読書の記録がメイン。後は、つぶやき的な記録。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
仕事でaccess.logの分析を急いでする必要があった。
フリーのanalogを使っているんだけど、ちょっと変わった分析をやりたくて。変わった分析をやるには、市販されているソフトもあるんだけど、予算も無いし、時間もないしで手作りというわけ。
access.logをmysqlのテーブルに格納するphpプログラム。
スピードは遅いけど、それなりに動く。強引な処理もあるけど、記録として残しておこく。
PEAEのDBを使用している。
ここから。
フリーのanalogを使っているんだけど、ちょっと変わった分析をやりたくて。変わった分析をやるには、市販されているソフトもあるんだけど、予算も無いし、時間もないしで手作りというわけ。
access.logをmysqlのテーブルに格納するphpプログラム。
スピードは遅いけど、それなりに動く。強引な処理もあるけど、記録として残しておこく。
PEAEのDBを使用している。
ここから。
// PEAR::DBのインクルード(sql.phpに定義)
include_once "sql.php";
// ファイルを読み込み専用でオープンする
$fp = fopen("./access.log", "r");
// Combined形式のログフォーマット正規表現
$preg_log_format = "/^(.*) (.*) (.*) [(.*)] "(.*)" (.*) (.*) "(.*)" "(.*)"/";
// 除外する拡張子
$ex_word = "/styles.*.css|cgi-bin|.jpg|.JPG|.GIF|.gif|.ico|mt.js/";
while (!feof($fp)) {
// ファイルから一行読み込む
$line = fgets($fp);
//正規表現で配列に各要素を格納する
if (preg_match($preg_log_format, $line, $log)){
$log[4] = cnvdate($log[4]);
if ( !preg_match ($ex_word, $log[5])){
// sqlの定義
$sql=<<
values
('$log[1]',
'$log[2]',
'$log[3]',
'$log[4]',
'$log[5]',
'$log[6]',
'$log[7]',
'$log[8]',
'$log[9]'
)
EOS;
// SQL文を発行
$result = $conn->query($sql);
if (DB::isError($result)) {
die ($result->getMessage());
}
}
}
}
$count = $conn->affectedRows();
print "データを" . $count . "件、更新しました。";
// データベースから切断
$conn->disconnect();
// ファイルをクローズする
fclose($fp);
//- 関数 ---------------------------------------
// "DD/Mon/YYYY" の日付を "YYYYMMDD" に変換
function cnvdate($cnv){
$preg_date_format = "/^(.*)/(.*)/(.*):(.*):(.*):(.*)/";
if (preg_match($preg_date_format,$cnv, $mysql_time_stamp)){
print "a";
switch($mysql_time_stamp[2]){
case "Jan": $mysql_time_stamp[2] = "01"; break;
case "Feb": $mysql_time_stamp[2] = "02"; break;
case "Mar": $mysql_time_stamp[2] = "03"; break;
case "Apr": $mysql_time_stamp[2] = "04"; break;
case "May": $mysql_time_stamp[2] = "05"; break;
case "Jun": $mysql_time_stamp[2] = "06"; break;
case "Jul": $mysql_time_stamp[2] = "07"; break;
case "Aug": $mysql_time_stamp[2] = "08"; break;
case "Sep": $mysql_time_stamp[2] = "09"; break;
case "Oct": $mysql_time_stamp[2] = "10"; break;
case "Nov": $mysql_time_stamp[2] = "11"; break;
case "Dec": $mysql_time_stamp[2] = "12"; break;
default: $mysql_time_stamp[2] = "99";
}
}
return $mysql_time_stamp[3]."/".$mysql_time_stamp[2]."/".$mysql_time_stamp[1].":".$mysql_time_stamp[4].":".$mysql_time_stamp[5].":".$mysql_time_stamp[6];
}
?>
PR
この記事にコメントする