基本に忠実に、PHPでアクセスカウンタを作ってみた。

カウントアップするスクリプトと、カウンタを表示させるスクリプトは別。

カウントアップ用スクリプトはごく単純な二重読み込み防止機能を。

<?php
$countdat = "./countdat";
$hostfile = "./counthost";
$host = file($hostfile);
if($host[0] != $_SERVER['REMOTE_ADDR']){
  $fp = fopen($countdat , "r+") or die();
  flock($fp, LOCK_EX);
  $count = fgets($fp);
  $count = $count + 1;
  rewind($fp);
  fputs($fp, $count);
  fclose($fp);

  $fp = fopen($hostfile,"w") or die();
  fputs($fp,$_SERVER['REMOTE_ADDR']);
  fclose($fp);
}
?>


ホストファイルにカウントしたときのクライアントのIPアドレスを書いといて、
それを読んで同じ人なら何も処理なし。
来る人の少ないしょんぼりサイトでのみ役立つ二重読み込み防止機能。
うちはこれで充分。いいでしょ。

カウンタ表示はphpでpngを出力してやる。

<?php
//初期設定
$logfile = "./countdat";
$count = file($logfile);    //数字
$count = str_pad($count[0],11,0,STR_PAD_LEFT);    //11桁にゼロパディング

//枠作成
  header("Content-Type: image/png");
  $img = imagecreate(80,15);                    //とりあえず全体枠を
  imagecolorallocate($img,180,180,180);        //グレーで。
  $color = imagecolorallocate($img,255,255,255);    //白を指定して
  imageline($img,1,1,1,13,$color);    //縦の左枠を書く
  imageline($img,78,1,78,13,$color);    //右の枠を書く
  imageline($img,1,1,78,1,$color);    //上の横枠を書く
  imageline($img,0,13,78,13,$color);    //下の横枠を書く

  $color = imagecolorallocate($img,0,0,0);            //黒を指定して
  imageline($img,0,0,0,14,$color);    //縦の左枠を書く
  imageline($img,79,0,79,14,$color);    //右の枠を書く
  imageline($img,0,0,79,0,$color);    //上の横枠を書く
  imageline($img,0,14,79,14,$color);    //下の横枠を書く

  $color = imagecolorallocate($img,255,255,255);            //白を指定して
  imageline($img,57,1,57,13,$color);    //hitsの左の線

//文字入れ
  $color = imagecolorallocate($img,0,0,0);    //
  imagestring($img,1,2,3,$count,$color);
  imagestring($img,1,59,3,"hits",$color);
  $color = imagecolorallocate($img,0,0,0);    //黒

  imagepng($img);
  exit();

?>

右の枠内のバナーと並べて表示するために、リンクボタンと同じ80x15の画像で出力してやる。
ゼロパディングしてるのは虚仮威し。
スペースパディングの方がいいかも。