2006年02月10日
フリーフォント + MySQL アクセスカウンタ(dbcounter)
- lightbox
- 04:10
- トラックバックする
- カテゴリー:フリーフォント 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.jpdbcounter.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)"へのトラックバックはまだありません。