"tag", #カウントページのタグ "tag" => "tag", "c" => "color", #カラー指定 "color" => "color", "w" => "width", #桁数 "width" => "width", "s" => "size", #フォントサイズ "size" => "size", "trans" => "trans", #背景透過するか(trans!="no"で透明) "init" => "init", #初期値 "op" => "oper", #オペレータパスワード "oper" => "oper" ); $dbsavedtag=array ( "color" => "color", "width" => "width", "size" => "size", "trans" => "trans", ); // パラメータ解釈(設定取り出しに必要なのでtagだけ先行で取り出し) if (isset($HTTP_GET_VARS)){ foreach($HTTP_GET_VARS as $k => $v){ if($taglist[$k] == "tag"){ $v = stripslashes($v); $v = htmlspecialchars($v); $v = ereg_replace("\r", "", $v); $v = ereg_replace("\n", "", $v); ${$taglist[$k]} = $v; } } } //セッション管理情報の生成。 $reloadtagname=$_SERVER['HTTP_HOST'].":".$_SERVER['SERVER_PORT'].$_SERVER['PHP_SELF']."?t=".$tag; $reloadtag="reloadtag_". md5($reloadtagname); $_SESSION[$reloadtag]=$_SESSION[$reloadtag]+0; $dbid=dba_popen("${datahome}/${dataname}.db", "w", "db2"); //$dbid=dba_open("${datahome}/${dataname}.db", "r", "db2"); // db open err処理は…どのみちいらん // このカウンタに関する保存値の取り出し if(dba_exists("${tag}", $dbid)){ $value=dba_fetch("${tag}", $dbid); foreach($dbsavedtag as $key){ if(dba_exists("${tag}/${key}", $dbid)){ ${$key}=dba_fetch("${tag}/${key}", $dbid); } } } //dba_close($dbid); //$dbid=dba_open("${datahome}/${dataname}.db", "w", "db2"); // パラメータ解釈(設定取り出しに使ったtag以外を取り出し) if (isset($HTTP_GET_VARS)){ foreach($HTTP_GET_VARS as $k => $v){ if($taglist[$k] != ""){ if($taglist[$k] != "tag"){ $v = stripslashes($v); $v = htmlspecialchars($v); $v = ereg_replace("\r", "", $v); $v = ereg_replace("\n", "", $v); ${$taglist[$k]} = $v; } } } } if($oper == $password || $value <= 0){ //このカウンタ自体未使用 or 管理者による上書き $value=$init; }else{ //このセッションではこのカウンタがお手つきになってないのでいんくりめんと if($_SESSION[$reloadtag] == 0){ $value++; } } // DBに書いておく。他のセッションのために。 if(dba_exists( $tag, $dbid)){ dba_replace($tag, $value, $dbid); }else{ dba_insert( $tag, $value, $dbid); } foreach($dbsavedtag as $k){ $t="${tag}/${k}"; if(dba_exists( $t, $dbid)){ dba_replace($t, ${$k}, $dbid); }else{ dba_insert( $t, ${$k}, $dbid); } } dba_optimize($dbid); dba_sync($dbid); //dba_close($dbid); //色展開 //list($bg0, $bg1, $fb0, $fg1)=$colors=explode(",", $color); if( sscanf( $color, "%02x%02x%02x,%02x%02x%02x,%02x%02x%02x,%02x%02x%02x", $bg0r, $bg0g, $bg0b, $bg1r, $bg1g, $bg1b, $fg0r, $fg0g, $fg0b, $fg1r, $fg1g, $fg1b ) != 12 ){ $bg0r=$bg0g=$bg0b=255; $bg1r=$bg1g=$bg1b=255; $fg0r=$fg0g=$fg0b=0; $fg1r=$fg1g=$fg1b=128; } //あまりに変な入力値排除 if ($size < 1){ $size=1; }elseif($size > 50){ $size=50; } //上の桁から配置 $v_len=0; while(1){ $v_cur=substr($value, $v_len, 1); if(strlen($v_cur) == 0){ break; } //countup $v_len++; } // 0fill if($width > $v_len){ $v_str=sprintf("%0${width}u", $value); }else{ $v_str=substr($value, -1, $width); } $bbox=imagettfbbox($size, 0, $font, $v_str); $outimage=imagecreate(abs($bbox[2]-$bbox[0])+4, abs($bbox[1]-$bbox[7])+4); if($_SESSION[$reloadtag] > 0){ $col_bg = ImageColorAllocate ($outimage, $bg1r, $bg1g, $bg1b); $col_fg = ImageColorAllocate ($outimage, $fg1r, $fg1g, $fg1b); }else{ $col_bg = ImageColorAllocate ($outimage, $bg0r, $bg0g, $bg0b); $col_fg = ImageColorAllocate ($outimage, $fg0r, $fg0g, $fg0b); } if($trans != "no"){ $col_bg = ImageColorTransparent($outimage, $col_bg); } imagefill($outimage, 0, 0, $col_bg); imagettftext($outimage, $size, 0, -$bbox[6], -$bbox[7], $col_fg, $font, $v_str); header("Content-type: image/png"); imagepng($outimage); imagedestroy($outimage); $_SESSION[$reloadtag]+=1; // 作り置き?関数 function errprint($m){ header("Content-type: text/plain"); echo "$m\n"; exit(); }