2006年02月10日

フリーフォント + MySQL アクセスカウンタ(dbcounter)

ダウンロード

サンプル ->

DB の キャラクタセットが EUC という前提で、SQL も EUC で書いています。
( DB の キャラクタセットが UTF-8 の場合、PHPソースコードは UTF-8N で保存する必要があります )
( テーブル作成は通常サービスとしてphpMyAdminがあると思いますので、そこで作成します )
dbcounter.sql
CREATE TABLE `カウンタ表示` (
`ページ` varchar( 25 ) ,
`カウンタ` int,
`備考 ` varchar(100) default 0,
PRIMARY KEY ( `ページ` ) 
)
dbcounter.txt
; 使用可能なサイトを列挙します
http://winofsql.jp
http://lightbox.sblo.jp
http://infoboard.winofsql.jp
http://hp.vector.co.jp
http://webase.winofsql.jp
dbcounter.php
( 赤い部分がユーザ固有の情報ですので書き換える必要があります )
<?
# **********************************************************
# このソースコードは、EUC-JP CR+LF です
# **********************************************************
header("Content-type: image/png");
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );

# **************************************
# ページ ID が無い
# **************************************
if ( $_GET['page'] == '' ) {
	MyImageOut( 'no Target ID' );
	exit();
}

# **************************************
# フォント情報
# **************************************
$font_path = "../../php/";
$font = "akeleph.ttf";

$Site = FALSE;
$file = file( "dbcounter.txt" );
for( $i = 0; $i < count( $file ); $i++ ) {

	# 改行削除
	$target = rtrim( $file[$i] );

	# 空行は無視
	if ( $target == "" ) {
		continue;
	}

	# コメント文字
	if ( substr( $target, 0, 1 ) == ";" ) {
		continue;
	}

	$len = strlen( $target );
	$ref = substr( $_SERVER['HTTP_REFERER'], 0, $len );
	if ( $target == $ref ) {
		$Site = TRUE;
		break;
	}
}

# **************************************
# 使用不可
# **************************************
if ( !$Site ) {
	MyImageOut( 'can\'t use' );
	exit();
}

$Connect = mysql_connect(
	"サーバー",
	"ユーザ",
	"パスワード" );
mysql_select_db( "データベース", $Connect );

$Query = 'update `カウンタ表示`';
$Query .= ' set `カウンタ` = `カウンタ` + 1';
# **************************************
# リファラをチェックしたい場合
# 以下のコメントを外す
# **************************************
#$Query .= ',`備考` = \'' . $_SERVER['HTTP_REFERER'] . '\'';
$Query .= ' where `ページ` = \'' . $_GET['page'] . '\'';

# **************************************
# 更新実行
# **************************************
mysql_query( $Query, $Connect );

# **************************************
# 更新対象が無ければ行を作成
# **************************************
$UpdateRows = mysql_affected_rows( $Connect );
if ( $UpdateRows == 0 ) {
	$Query = 'insert into `カウンタ表示`';
	$Query .= ' values( \'' . $_GET['page'] . '\', 1, NULL )';
	mysql_query( $Query, $Connect );
}

# **************************************
# 新しいカウントを取得
# **************************************
$Query = 'select `カウンタ` from `カウンタ表示`';
$Query .= ' where `ページ` = \'' . $_GET['page'] . '\'';
$Result = mysql_query( $Query, $Connect );
$Column = mysql_fetch_array( $Result );
$CounterNo = $Column['カウンタ'];

mysql_close( $Connect );

# **************************************
# フォーマットを編集
# **************************************
$CounterNo = sprintf( '   %07d', $CounterNo );

# **************************************
# 描画
# **************************************
MyImageOut( $CounterNo );

# **********************************************************
# 画像表示
# 日本語表示が必要な場合は、$OutData を
# UTF-8 に変換する必要があります
# **********************************************************
function MyImageOut( $OutData ) {

	$im = imagecreate(115,20);
	$white = imagecolorallocate($im, 255,255,255);
	$black = imagecolorallocate($im, 0,0,0);

	imagettftext(
		$im,
		12,
		0,
		10,
		16,
		$black,
		$GLOBALS['font_path'] . $GLOBALS['font'],
		$OutData );

	imagepng($im);
	imagedestroy($im);

}

?>

設置方法
( XXXXXXXXXXXXXXXXXXXXXXXXX はアクセスカウントしたいユニークなページIDを指定します。)
( 25バイト以内の英数字 )
<IMG
 src="http://ドメイン/パス/dbcounter.php?page=XXXXXXXXXXXXXXXXXXXXXXXXX"
 border="1"
>

Trackback on "フリーフォント + MySQL アクセスカウンタ(dbcounter)"

このエントリーのトラックバックURL: 

"フリーフォント + MySQL アクセスカウンタ(dbcounter)"へのトラックバックはまだありません。