・単一のドメイン用のアクセスカウンタです
(あえてドメインを無視してパスで記録しています)
・データーベース(MySQL)を使用するので競合の心配がありません
・出力はPNG形式のイメージです
・使用する際は<img>タグで使用してください
<?php
$link = mysql_connect('[サーバー名]', '[ユーザー名]', '[パスワード]');
mysql_select_db('[データーベース名]' ,$link);
$HTTP_REFERER = $_SERVER['HTTP_REFERER'];
$path = $_SERVER['HTTP_REFERER']; // パスのみを抽出
if (strlen($path) > 0){
$path = substr($path, strpos($path, '/', 7));
$temppos = strpos($path, '?');
if ($temppos !== False) $path = substr($path, 0, $temppos);
}
if (strlen($path) == 0) $path = '(unknown)'; // 取得できない場合
$tempDateTime = date('YmdHis');
$query = "select * from AccessCount where Path='".$path."'";
$result = mysql_query($query, $link);
$line = mysql_fetch_array($result, MYSQL_ASSOC);
$count = trim($line['Count']);
if (strlen($count) > 0){ // 目的のpathはあるか?
$query = "update AccessCount set count=count+1,LastUpdate='".$tempDateTime."' where Path='".$path."'";
$result = mysql_query($query, $link); // あれば回数を加算
}
else{
$query = "insert into AccessCount values ('".$path."',1,'".$tempDateTime."')";
$result = mysql_query($query, $link); // 無ければ1回で生成
}
$query = "select * from AccessCount where Path='".$path."'";
$result = mysql_query($query, $link);
$line = mysql_fetch_array($result, MYSQL_ASSOC);
$count = $line['Count']; // 回数を取得
$query = "insert into AccessLog values ('".$tempDateTime."',".
"'".$path."',".
"'".$HTTP_REFERER."',".
"'".$count."',".
"'".$_SERVER["HTTP_USER_AGENT"]."',".
"'".$_SERVER['REMOTE_ADDR']."',".
"'".gethostbyaddr($_SERVER['REMOTE_ADDR'])."')";
$result = mysql_query($query, $link); // アクセスログを記録
$strcount = substr('0000000000'.$count, -6); // ゼロつき6桁に整形
header("Content-type: image/png"); // 出力はpng形式
$im = @imagecreate(64, 16); // 桁数を変更した際は要変更
$background_color = imagecolorallocate($im, 255, 255, 255); // 背景色
$text_color = imagecolorallocate($im, 120, 120, 150); // 文字色
imagerectangle($im, 0, 0, 64, 16, $background_color); // 背景を描画
imagestring($im, 5, 5, 0, $strcount, $text_color); // 文字を描画
imagepng($im); // イメージを出力
imagedestroy($im);
?>
・使用するデーターベースは以下のプログラムで作成してください
<?php
// AccessCountテーブルを作成
// アクセスカウンタ用
// サーバー名,ユーザー名,パスワード,データーベース名 は必ず正しい情報を設定すること
$link = mysql_connect('[サーバー名]', '[ユーザー名]', '[パスワード]');
mysql_select_db('[データーベース名]' ,$link);
// 再作成する場合は以下2行のコメントをはずす
// $query = "DROP TABLE IF EXISTS AccessCount";
// $result = mysql_query($query, $link);
$query = "CREATE TABLE AccessCount (".
" Path varchar(128) NOT NULL default '',".
" Count int(11) NOT NULL default '0',".
" LastUpdate varchar(16) NOT NULL default '',".
" PRIMARY KEY (Path)".
") TYPE=MyISAM";
$result = mysql_query($query, $link);
?>
<?php
// AccessLogテーブルを作成
// アクセスログ用
// サーバー名,ユーザー名,パスワード,データーベース名 は必ず正しい情報を設定すること
$link = mysql_connect('[サーバー名]', '[ユーザー名]', '[パスワード]');
mysql_select_db('[データーベース名]' ,$link);
// 再作成する場合は以下2行のコメントをはずす
// $query = "DROP TABLE IF EXISTS AccessLog";
// $result = mysql_query($query, $link);
$query = "CREATE TABLE AccessLog (".
" DateTime varchar(16) NOT NULL default '',".
" Path varchar(64) NOT NULL default '',".
" FullPath varchar(255) NOT NULL default '',".
" Count int(11) NOT NULL default '0',".
" UserAgent varchar(128) NOT NULL default '',".
" RemoteAddr varchar(64) NOT NULL default '',".
" HostName varchar(64) NOT NULL default '',".
" PRIMARY KEY (DateTime)".
") TYPE=MyISAM";
$result = mysql_query($query, $link);
?>
...