簡単なアクセスカウンター

ファイルの読み出し と ファイルの書き込み の両方が理解出来ていればわざわざここで書く必要は無いことだが、 コピペで使いたいという場合と、簡単な解説です。 と言う事で前2ページを見ていることを前提に、今回新たに使う関数は
fgets と rewind
このふたつ。
先にまとめると

<?php
$counter_test = fopen("test.txt" , "r+") or die("ファイル無かったし");
$count = fgets($counter_test);
$count++;
rewind($counter_test);
if(flock($counter_test , LOCK_EX)){
 fwrite($counter_test , $count);
}
fclose($counter_test);
print ($count);
?>

phpページのカウンターを表示させたい部分に直接これを書いてもいいし、includeしてもいい。
"r+"で開いているのでデータを保存するファイル(この例ではtest.txt)は0だけを書いたものを予め作っておく。(文字コードに注意)
fgetsはファイルから1行だけ読み込む関数。
普通のアクセスカウンターなので1行しかないからこれでOK。
rewindはファイルポインタを先頭に戻す関数。
fgetsで読み出すと、ファイルポインタが終端まで行ったとこで止まるのでそれを先頭に戻す。
$count++;は読み出した数字に1を足している。
流れは

 ファイルを開く
 ↓
 1行読み出す
 ↓
 カウント値に+1
 ↓
 ポインタを先頭に戻す
 ↓
 ファイルロック
 ↓
 書き込み
 ↓
 ファイルクローズ
 ↓
 カウンタ値表示

と言う感じ。

ここで問題は データを保存するファイルは"r+"モードで開いている以上、 あらかじめ作っておかなくてはいけない。 文字コードによっては化けるし期待通りに動いてくれないので、 適当に文字コード指定で保存する事。

ちなみに、var_dump($count);で型と値が出力されるので確認できるが、 数字しか書き込んでないのに常にstring・・・。 キャストもあるけどそれで正常に動いてしまうという。 Cなどでは明示的に型宣言するので、違和感ありまくり。

蛇足だが、上記ではアクセスカウンターの数字はテキストになる。
画像にしたい場合は足した後の$countの値を1バイトずつ分解し、
printする時に(分解保存した変数名[桁数] . ".gif")
のような感じでforで繰り返し表示させればよい。
もちろん0.gif〜9.gifのファイルは予め作っておく。



当サイト「ぺたっとPHPサンプルソースコード」は、初めてPHPを触る初心者でもすぐにPHPプログラミングができる・分かるサイトです。


PHPのサンプル

著作権について
ファイルからデータの読み込み
ファイルへのデータの書き込み
フォルダ内のファイル名取得
アクセスカウンターの作り方
アンケートの作り方
フォームからのデータの取得
フォーム以外のページからのデータの取得
ファイル内、文章内の文字列の検索
パスワード認証の方法と作り方

0から始めるPHP

PHPのすすめ(これ飛ばしてもいい)
必要な環境とPHPへのアクセス
開発に使うもの
初めての方への注意点
PHPの基本(何らかの言語経験者向け)
PHPの基本(初めての人向け)
書き方
ファイルの読み込み

PHPプログラミング講座
文字などの出力
PHPにおける変数
ifによる条件比較
forによる繰り返し処理
PHPにおける配列
これまでとこれからの学び方

その他

プログラミングのコツ
プログラマーと年齢
レンタルサーバーの選び方
誰でも簡単にできるサーバー負荷対策
社内や自宅サーバーのグローバルIPアドレスが変わってもアクセスできるようにする

日記

2014年
日本語形態素データとキーワード出現回数
Androidベースのゲーム機に期待
4月末に判明したIEの脆弱性について
フラッシュプレーヤーの製作
ホームページとウェブサイトの違い
WIFIなどの用語は正しく使いたい
国産ゲーム会社のサイトについて
検索エンジンの開発について
プレインストールWindowsからの脱却
Android・iPhoneとアプリ開発
Windows8、スタートボタンはもういらない?
サイトの作成とやるやらないは別
あの人は詳しいと言う人と言われる人
index.htmlと/の正規化について
AndroidOSとLinuxOS
モバイル端末で必ず見るもの
ユーザー参加型市民アプリ

2013年2月
2013年1月
2012年12月
2012年11月
2012年10月
2012年9月