シェルスクリプトとcronでアクセス毎の時間、url、ホスト名を日ごとに別ファイルに記録する
1)サイト内の各ページ(phpファイル)にアクセス毎にログファイル(log.dat)に記入していくよう記述する
$year = date('Y');
$month = date('m');
$day = date('d');
$hour = date('H');
$hostip = getenv("REMOTE_ADDR");
$hostname = gethostbyaddr($hostip);
$platform = get_browser(null, true);
$browser = $platform["parent"];
/*** アクセス情報を一件のレコードとする ***/
$log = $hour . "," . $item_id . "," . $hostip . "," . $hostname . "," . $browser . "\r\n";
/*** 記録するファイル名 ***/
$countfile = "log.dat";
/*** レコードを末尾へ記入 ***/
$fp = @fopen($countfile,"a");
fputs($fp, $log);
fclose($fp);
| 使った関数 | |
| getenv(“REMOTE_ADDR”) | アクセス元のIPアドレスを取得する |
| gethostbyaddr | IPアドレスからホスト名を取得する |
| get_browser(null, true) | ブラウザ情報を取得する |
2)毎日夜中にlog.datを[日付].datへコピーして消去する
log.datを[日付].datへコピーして内容を消去するのshellスクリプトlog_bk.shを作成します。
#!/bin/sh
fecha=`date '+%Y%m%d'` ←日付(fecha)を取得
cp -p log.dat ${fecha}.dat ←log.datを日付.datへコピー
cat /dev/null >log.dat ←log.datへnullを書き込み消去
上記のスクリプトを毎日23時59分に実行するようcronを設定します。
#crontab -e
でツールを起動して/etc/crontabを編集します。
viと同じ感じで操作します。
59 23 * * * /[ディレクトリ]/log_bk.sh
と記入。
数字は左から、分、時間、日、月、週 を指定し、実行するファイル名を記入して保存。
#crontab -l
で記入した内容が表示されればOKです。
phpとcronで日毎のlog.datをデータベースへ格納する
1)log.datの中身をDBへ格納するphpファイルlog.phpを作成する
$file_name = "/hoge/log.dat";
$text = fopen($file_name,'r');
while(!(feof($text))){
$lines = fgets($text);
$_line = explode(",", $lines);
$sql = "insert into tbl_log (itm_id, log_ip, log_month, log_day, log_hour, log_year) values ('" . $_line["1"] . "', '" . $_line["2"] . "', '" . $month . "', '" . $day . "', '" . $_line["0"] . "', '" . $year . "')";
$rst = mysql_query($sql,$con)or die("no");
}
fclose($text);
| 使った関数 | |
| fopen | ファイルを開く。’r’は読み込み専用 |
| feof | ファイルの最後かどうかをチェックする |
| explode(“[区切り記号]”, “[文字列]”) | 文字列を区切り記号で区切って配列に格納する |
2)log.phpを毎日実行させる
crontabへ記述します。
58 23 * * * /usr/bin/php /hoge/logtodb.php
phpをcronで実行させるにはcrontabへphpへのパスを指定する必要があります。
user/bin/phpは
which php
で調べます。
