Warning: fopen(../..//web/php-counter/logs/main.dat) [function.fopen]: failed to open stream: Permission denied in /home/digitaland-net/public_html/web/php-counter/counter.php on line 124
》》Web プログラミング《《 〜Digitaland〜
デジタランド - TopPage CGI & PHP & JavaScript - リンク


TopPage >> CGI & PHP >> GRAPHIC Counter 【PHP】
データご利用について


GRAPHIC Counter PHP ◇ 画像カウンタ

■ファイル更新履歴
●2004/01/15 : Ver.1 公開

■ご注意
 この PHPスクリプト は、ログファイル類を全て PHP によって自動作成する仕様となっています。 そのため、PHP による新規ファイルの生成が認められていないサーバではこの PHP は動作しませんのでご注意下さい。
 また、PHP が動作しないサーバでは動きませんのでご注意下さい。

■ご利用規定
 万一、この PHP スクリプトを利用することにより利用者の方に何らかの不利益等が発生しても、作者は一切の責を負いませんので、その旨、あらかじめご了承下さい。


あなたは 0001922 番目の訪問者です

あなたは 番目の訪問者です



 上記のような PHP カウンタです。
 テキストカウンタにもグラフィックカウンタにも出来て、複数のページに設定出来ます。
 また、各ページ毎に、そのページ内にカウント結果を表示させるか、裏でカウントのみを行うかを設定出来ます。

ご注意!
 グラフィックカウンタとしてご利用の場合、画像はGIF形式のみで、それぞれファイル名は、

 0.gif1.gif2.gif ・・・・・・・ 9.gif

 と、必ず『数字、ドット、小文字で gif 』となるようにして下さい。


ご利用の手順1:

 以下のピンク色のテーブル内のコードをメモ帳などに ”コピー” し、それを

counter.php

 というファイル名で保存して下さい。

<?

//▽各種設定▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽

//▼ホームページのトップページURL
$URL="http://localhost";

//▼ホームページのトップページに割り当てたページID
$topid="index";

//▼この PHP ファイルから見たルートフォルダ
//  最後に '/' は付けないで下さい
$Mroot='../../';

//▼ルートフォルダから見たログファイル用フォルダ
//  最後に '/' は付けないで下さい
$log='web/php_g-counter/logs';

//▼ルートフォルダから見たイメージフォルダ
//  最後に '/' は付けないで下さい
$imgfolda='web/php_g-counter/img';

//▼ページのカウントアップを、クッキーで重複チェックするかどうか
//  $usekookie=0; でチェック無し
//  $usekookie=1; でチェック有り
$usecookie=0;

//▼書き込み用ファイルのパーミッション
//  変更不要の場合は $pms='';
$pms='0644';

//▼カウンタ用イメージの画像 Height サイズ
$imgheight=23;

//△設定終了△△△△△△△△△△△△△△△△△△△△△△△△△△△

$ref=ereg($SCRIPT_NAME,$HTTP_REFERER);
$str=ereg($URL,$HTTP_REFERER);
if ($PI != $topid && !$str && !$ref){ exit; }

$IC=0;
if (file_exists("$root/$log/counter.dat")){
        $FILE=file("$root/$log/counter.dat");
        $i=count($FILE);
        for ($j=0; $j<$i; $j++){
                list($BPI,$x)=split("<>",$$FILE[$j]);
                if ($BPI == $PI){ $IC=1; last; }
        }
}
if (!$IC && $PI){
        if (file_exists("$root/$log/counter.dat")){ $IC=1; }

        $lockfile="$root/$log/mainlock.dat";
        $LOCK=f_lock();
        if ($LOCK){
                $FILE=fopen("$root/$log/counter.dat", "w");
                flock($FILE, 2);
                $FL=$FILE;
                set_file_buffer($FILE, 0); rewind($FILE);
                for ($j=0; $j<$i; $j++){
                        list($BPI,$x)=split("<>",$FL[$j]);
                        fwrite($FILE, "$BPI<>\n");
                }
                fwrite($FILE, "$PI<>\n");
                flock($FILE, 3);
                fclose($FILE);
                if (!$IC){
                        if ($pms){ chmod("$root/$log/counter.dat",$pms); }
                }
                u_lock($LOCK);
        }
}

if (!$PI){
if (file_exists("$Mroot/$log/counter.dat")){
        $FILE=file("$Mroot/$log/counter.dat");
        $i=count($FILE);
}
print <<<EOC
<HTML>
<HEAD><TITLE>AccessCounter-Check</TITLE>
</HEAD>
<BODY>
<CENTER>
<BR>
<B>AccessCounter-Check<B><BR>
PageSet=$i<BR>
<BR>
<TABLE border=1 cellpadding=2 cellspacing=1>
<TR><TD>PAGE-ID</TD><TD>COUNT</TD></TR>
EOC;
        for ($j=0; $j<$i; $j++){
                list($BPI,$x)=split("<>",$FILE[$j]);
                if (file_exists("$Mroot/$log/$BPI.dat")){
                        $FL=file("$Mroot/$log/$BPI.dat");
                        $cnt=$FL[0];
print <<<EOC

<TR><TD align=center>$BPI</TD><TD align=center>$cnt</TD></TR>
EOC;
                }
        }
print <<<EOC
</TABLE>
</CENTER>
</BODY>
</HTML>
EOC;
        exit;
}

if (file_exists("$root/$log/$PI.dat")){
        $FILE=file("$root/$log/$PI.dat");
        $cnt=$FILE[0];
} else {
        $FILE=fopen("$root/$log/$PI.dat", "w");
        fclose($FILE);
        if ($pms){ chmod("$root/$log/$PI.dat",$pms); }
        $cnt=0;
}
$cnt++;

if (!$COOK){
        $FILE=fopen("$root/$log/$PI.dat", "w");
        if ($FILE){
                flock($FILE, 2);
                set_file_buffer($FILE, 0); rewind($FILE);
                fwrite($FILE, $cnt);
                flock($FILE, 3);
                fclose($FILE);
                if ($usecookie){ setcookie("COOK","1"); }
        }
}
$cnt=sprintf("%0$keta"."d", $cnt);

function f_lock(){
global $lockfile;
        if (file_exists($lockfile)){
                return 0;
        } else {
                $LOCK=fopen("$lockfile", "w");
                if ($LOCK){
                        flock($LOCK, 2);
                        return $LOCK;
                } else {
                        return 0;
                }
        }
}

function u_lock($LOCK){
global $lockfile;
        flock($LOCK, 3);
        fclose($LOCK);
        unlink("$lockfile");
}

?>


ご利用の手順2:

 コピーしたコードの下記の部分を、以下のように変更して下さい。


<?

△一番上のこれ。
  サーバによっては、

<?php

  とか

<?php4

  でなければ動かない場合がありますので、ご利用のサーバ会社の方にお尋ね下さい。



//▽各種設定▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽

//▼ホームページのトップページURL
$URL="http://www.hogehoge.net/";

△トップページのURLを http:// から記載して下さい。


//▼ホームページのトップページに割り当てたページID
$topid="main";

△後に説明する、トップページに割り当てるページIDを指定して下さい。
  このID以外は、セキュリティとサーバダウン対策のため、同じサイト内からのリンク以外
  (URL による直接のページ指定など)はカウントしません。



//▼この PHP ファイルから見たルートフォルダ
// 最後に '/' は付けないで下さい
$Mroot='../../';

△先の counter.php ファイル自体は、サイト内のどこに置いて頂いても構いません。
  ここでは、その counter.php ファイルから見た、ホームページのルートフォルダへのパスを
  指定して下さい。



//▼ルートフォルダから見たログファイル用フォルダ
// 最後に '/' は付けないで下さい
$log='counter/logs';

△ホームページのルートフォルダから見た、ログファイル用フォルダへのパスです。
  別サーバを指定することは出来ません。



//▼ルートフォルダから見たイメージフォルダ
// 最後に '/' は付けないで下さい
$imgfolda='counter/img';

△グラフィックカウンタとしてご利用の場合に設定して下さい。
  ホームページのルートフォルダから見た、数字画像を格納したフォルダへのパスです。
  別サーバを指定することは出来ません。



//▼ページのカウントアップを、クッキーで重複チェックするかどうか
// $usekookie=0; でチェック無し
// $usekookie=1; でチェック有り
$usecookie=0;

△ページの ”更新” によってカウントアップを行うかどうかの指定です。
  $usecookie=1;
  で、カウントアップを行いません。



//▼書き込み用ファイルのパーミッション
// 変更不要の場合は $pms='';
$pms='0644';

△書き込み用ファイルのパーミッション指定です。
  サーバによっては、これを指定するとエラーとなる場合がありますので、ご利用のサーバ会社の
  方にお尋ね下さい。



//▼カウンタ用イメージの画像 Height サイズ(ピクセル)
$imgheight=23;

△グラフィックカウンタとしてご利用の場合に設定して下さい。
  ご利用される画像ファイルの高さサイズをピクセルで指定して下さい。


//△設定終了△△△△△△△△△△△△△△△△△△△△△△△△△△△



ご利用の手順3:

 html ファイルごとに、以下の例のように記載して下さい。
 下記の

require "counter.php";

 に関して、この ”counter.php ファイル自体” はどこに置いて頂いても構いません。
 ここでは、それぞれカウンタを設定する HTML から見た、counter.php ファイルへのパスを指定するようにして下さい。


グラフィックカウンタの場合

<?
//▼カウンタを設定する HTML(PHP) ページから見たルートディレクトリ
$root="../../";

//▼カウンタを設定する HTML(PHP) ページのページID
// 複数のページにカウンタを設定する場合は必ず重複しないIDを割り当てて下さい
$PI="
sample1";

//▼カウンタ表示桁数
$keta=
5;

require "counter.php";

?>

<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<TITLE>■PHP カウンタ // グラフィックの例■</TITLE>
</HEAD>
<BODY>
<BR>
▼カウンタを表示させる位置に以下のようなコードを書きます。<BR>
<BR>
あなたは、このグラフィックサンプルカウンタ-サンプルページの<BR><BR>
<?
for ($i=0; $i<$keta; $i++){
$v=substr($cnt, $i, 1);
print ('<IMG src="'.$root."/".$imgfolda.'/'.$v.'.gif" border="0" height="'.$imgheight.'">');
}
?>

<BR><BR>番目の訪問者です。
</BODY>
</HTML>


テキストカウンタの場合

<?
//▼カウンタを設定する HTML(PHP) ページから見たルートディレクトリ
$root="../../";

//▼カウンタを設定する HTML(PHP) ページのページID
// 複数のページにカウンタを設定する場合は必ず重複しないIDを割り当てて下さい
$PI="
sample2";

//▼カウンタ表示桁数
$keta=
10;

require "counter.php";

?>

<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<TITLE>■PHP カウンタ // テキストの例■</TITLE>
</HEAD>
<BODY>
<BR>
▼カウンタを表示させる位置に以下のようなコードを書きます。<BR>
<BR>
あなたは、このテキストカウンタ-サンプルページの<BR><BR>
<?
print $cnt;
?>

<BR><BR>番目の訪問者です。
</BODY>
</HTML>


 なお、<HTML> の上の部分だけを記載すると、カウントアップのみでページ内への表示はされなくなります。

 また、

 複数のページにカウンタを設定する場合で、クッキーによる重複カウントアップをしない設定でご利用される場合

 は、

 それら複数のページが同じフォルダ内にある場合は、最初に訪れたどれか1つのページ分しかカウントアップされません

 ので、複数のページに設定される場合はそれぞれ別のフォルダとなるようにご注意下さい。



ご利用の手順4:

 あとは、ファイル類をアップロードして、必要であれば、先の counter.php で指定したログファイル用フォルダ

$log='counter/logs';

 を、書き込み可能のパーミッションに変更して下さい。


 以上で設定は終了です。



▼以下、上のサンプルコードを実際に表示させた例です。

上記、グラフィックカウンタの設置サンプル(ページ ID = sample1 // 表示桁数5)
上記、テキストカウンタの設置サンプル(ページ ID = sample2 // 表示桁数10)


 なお、各ページへのアクセス状況を確認する場合は、count.php を直接指定して下さい。
 但し、ホームページのトップページURLで指定したサイト以下からのリンク以外は動作しません(ブラウザ上からの直接URL指定では動きません)のでご注意下さい。

アクセス状況のチェック(この説明ページ自体のページIDは main としています)






Digitaland Copyright© Tetsuya Jo 2002..2004