基本のカウンター
そふぃのPHP入門 >> サンプルスクリプト >> カウンター >> 基本のカウンター

基本のカウンター

作成準備

カウンターは簡単なファイル操作を必要とします。カウンターの数値を記録しておくファイルが別に必要になるので注意して下さい。

まず最初にカウント値を保存しておくファイルを作ります。ここでは「count.txt」としていますが、名前は何でもいいです。新規作成でファイルを作り、ここに「0」とだけ書いて保存しておいて下さい。保存先はとりあえずカウンタースクリプトと同じフォルダにしておいて下さい。このファイルが実際のカウンター値を記録するファイルになります。

さらに、このファイルのパーミッションは「666」にしておいて下さい。

カウンターに必要な処理をまとめておくと・・・

  1. カウント値を記録しているファイルを開く
  2. ファイルから現在のカウント値を読み取る
  3. カウント値を1増やす
  4. 新たなカウント値をファイルに書き込む
  5. 開いたファイルを閉じる
  6. カウント値出力

と、こういう手順になります。上記の手順のほとんどはPHPに用意されている関数で実現できるので、実際のスクリプトは非常に簡単です。

サンプルスクリプト

カウンタースクリプトのサンプルです。更新ボタンを押すとどんどん数値が上がっていってしまうような簡単なカウンターですが、カウンタースクリプトの基本とも言えるのでがんばって覚えて下さい。

但し、このスクリプトではファイルロックなどの排他制御を一切行っていないため、このまま運用するとカウント値記録用のログファイルがリセットされたりする事もあります。基本を覚えたらファイルロックなどをかけてみて下さい。

カウンターの基本処理

  1. <?php
  2. $fp = fopen( "count.txt", "r+" ); // ファイル開く
  3. $count = fgets( $fp, 10 ); // 9桁分値読み取り
  4. $count++; // 値+1(カウントアップ)
  5. rewind( $fp ); // ファイルポインタを先頭に戻す
  6. fputs( $fp, $count ); // 値書き込み
  7. fclose( $fp ); // ファイル閉じる
  8. echo 'あなたは'.$count.'人目のお客様です';
  9. ?>

出力結果

あなたは22479人目のお客様です

参考関数

  • fopen() ---- ファイルまたはURLを開く
  • fgets() ---- ファイルから1行取得する
  • rewind() ---- ファイルポインタの位置を先頭に戻す
  • fputs() ---- fwrite()関数のエイリアス
  • fclose() ---- ファイルポインタを閉じる

解説

ファイルを開いてファイルポインタ取得

まず、カウント値を記録しているファイルを開きます。

  1. $fp = fopen( "count.txt", "r+" );

fopen()という関数を使ってファイルを開いていますが、fopen()関数はファイルが正常に開けた時にファイルポインタという値を返します。ファイルポインタというのはこれ以降、指定したファイルへアクセスする為のファイル識別子みたいなもんです。この識別子を代入しておく為に「$fp」という変数を作成して、ファイルポインタを保存しておきます。変数名は別に$fpじゃなくても何でもいいですが、一般的にファイルポインタが格納される変数名には$fp$handleが多いようです。

fopen()関数の第1引数にはファイルへのパス・第2引数にファイルを開くための「モード」を指定します。「count.txt」というカウント値記録ファイルは同じフォルダにあるという前提なので"count.txt"のみの記述ですが、同じフォルダになければファイルへのパスを記述して下さい。

第2引数のモードというのは「新規書き込みモード」だとか、「上書きモード」だとかです。。「r+」というのは上書きモードだと思って下さい。読み書き可能なモードで、ファイルポインタがファイルの先頭に置かれた状態で開かれます。他のモードについてはfopen()関数を参照して下さい。

値の読み取り

ファイルから現在のカウント値を読み取ります。

  1. $count = fgets( $fp, 10 );

fgets()関数というのが出てきました。これは開いたファイルの内容を読み取る関数です。第1引数に先ほど取得したファイル識別子を、第2引数に読み取るバイト数を指定します。

fgets()関数が実際に読み取る値は「指定したバイト数-1」です。この場合だと9バイトまで読み取りますので、9桁まで読み取る事が出来るって意味になります。第2引数をなぜこの値にしたかは特に意味はありません。10という数字がキリがいい事と、カウンターの基本を覚えるためのカウンターなので9桁もあれば十分だろうと思ったからです。この関数は読み取った値を返すので、その値を「$count」という変数に代入しています。

カウントアップ

カウント値を1増やす。

  1. $count++;

これは典型的なカウントアップです。$countを1増やすという意味を持ちます。別の書き方で書くと、「$count=$count+1」となります。これで変数「$count」には新たな値(元のカウント値+1)が代入されます。

ファイルポインタの巻き戻し

ファイルポインタを先頭に戻す。

  1. rewind( $fp );

新たな値の書き込みをする前に注意点があります。カウント値を読み取った時点で$fpに代入されているファイルポインタは読み取った値の後ろに移動しています。このポインタを先頭に戻さないと、読み取った値の後ろから新たな値を書き込んでいってしまいます。これではカウンターとしての役目を果たせないので、ファイルポインタを先頭に戻します。その処理をするのがrewind()関数です。引数で指定したファイルポインタを先頭に戻します。ファイルポインタの移動にはfseek()関数もありますので参考にして下さい。

値の書き込み

新たなカウント値をファイルに書き込む。

  1. fputs( $fp, $count );

今度は新たな値をファイルに書き込みます。これには関数を使います。第1引数にファイルポインタ、第2引数には書き込みたい値を指定します。関数はfwrite()関数と丸っきり同じ(エイリアスという)ですのでお好きな方を使って下さい。

ファイルを閉じてファイルポインタを破棄

開いたファイルを閉じる。

  1. fclose( $fp );

開いたファイルは閉じておきましょう!!ということでファイルを閉じます。fclose()関数を使います。閉じるファイルのファイルポインタを指定します。この関数を使うとファイルを閉じて取得したファイルポインタの破棄を行ってくれます。

出力

カウント値出力

  1. echo 'あなたは'.$count.'人目のお客様です';

これはいちいち解説するまでもなく出力命令のecho()文です。print()文を使ってもいいです。

さて、ここまでで基本的なものができたので後はこれを改造していろいろ機能を追加してみて下さい。