ボブ先生のスパルタPHP入門講座

chapter5 カウンタを作ろう

さあ基本もバッチリになってきたところで、今度はHPのマストアイテム、 カウンタを作ってみることにしましょう。超簡単なやつね! あ、紹介が遅れました。今日はボブ先生バケーションに出てるのでわたくし坂本が臨時講師をさせて頂きます。

じゃあまず仕様を考えましょう。

1.counter.txtというファイルを読み込む
2.ファイルに書かれた数字を読み込む
3. 2 の数字をカウントアップ(1足す)する
4. 3 の数字をcounter.txtに書き込む
5. 3 の数字を表示する

たったこれだけでカウンタの完成よ!では、仕様にあわせてプログラムを見てみましょう。
<?php 

$fp 
fopen("counter.txt""r+");
$iCount fgets($fp64);

flock($fp2);
fseek($fp0);

$iCount++;
fputs($fp$iCount);

fclose($fp);

?> 
<html>
<body>

あなたは <?= $iCount ?> 人目のお客様です(^o^)丿

</body>
</html>
さて、上のプログラムを実行してみましょう。するとなにやらエラーが表示されたと思います。 歩くジオスと呼ばれた僕がスルスルと英語を訳しますと、どうやら何かのファイルがないとのこと。 そうですcounter.txtがないためfopenという関数が失敗しているんですね。 というわけでエラーを回避するために、おとなしくcounter.txtを作ることにします。 初期値として「0」と書いてPHPファイルと同ディレクトリに保存しましょう。
実行するとこういう感じになります。

ところでファイルを読み込む手順は以下のようになります。

1.ファイルを開く
2.ファイルを読み込む
3.ファイルを閉じる


ファイルを開く(line:3)

fopen という関数は第一引数で指定されたファイルを、第二引数のモードでオープンする関数です。 つまりここではcounter.txtというファイルを"r+" というモードで開くというわけです。モードについてはfopenのリファレンスで確認してください。

ファイルを読み込む(line:4)

さて、ファイルを開いたらいよいよ読み込みです。 読み込みにはfgets という関数を使います。パスを指定し、最大読み込みサイズを指定するだけ。 数字は今は適当でいいです。0とか1とかにするとどうなるかも試してみてください。

ファイルをロックする(line:6)

ここでflock という関数を使ってcounter.txtを他から書き込み禁止にしています。なぜそんなことをするのかというと、 同時アクセスがあった場合、両方がファイルを開いて書き込みを行おうとして、失敗する可能性があるからです。 まあ今回のような軽いテキストの場合はいらんちゃーいらんのですが、安全のためやってます。

ファイルポインタを先頭に戻す(line:7)

次にファイルポインタを先頭に戻すという作業をせねばなりません。fgetsでファイルを読み込んだ時、 ファイルポインタは読み込んだ最後に移動しています。fgetsは一行を読み込む関数なのでファイルポインタは 現在一行目の最後にあります。僕もよくわからんのでうまく説明できませんが、 要するに今ある内容を書き換えたい場合はファイルポインタを先頭に、 今ある内容に追加したい場合はファイルポインタを最後尾に移動するということです。(自信ありません) このファイルポインタの移動をしてくれるのが fseekです。

ファイルに書き込む(line:10)

長らくお送りしてきたこのChapterもいよいよ佳境に入ってきました。 では、読み込んだカウンタに1プラスしてみましょう。これは簡単、数字++とすると数字が1プラスされます。 5++なら6ね。4--なら3ね。で、いよいよカウントアップしたものを再度counter.txtに書き込もうと思います。 今までの一連の関数を見ると fputs の使用方法もなんとなくわかると思うので、ここでは説明しません。きゃあ!スパルタ!

ファイルを閉じる(line:12)

最後にfcloseで ファイルを閉じるとファイルの読み書きは終了です。めでたしめでたし。

ここで賢明なあなたなら「あれ?」と思うかもしれません。 そうです、print関数を使わずに出力を行っています。 PHPでは<?= $iCount ?>とすると変数$iCountの内容を出力できる ようになっています。これだとプログラムがわかりやすくなって便利だよね!!ドリュン☆(真顔で書いてます)

さて、こうしてカウンタができたわけですが、どうでしょうか。グダグダと説明はしましたが、 プログラムはいたって簡単だと思います。用意されてる関数を使ってるだけですから。 で、今回のプログラムにはcounter.txtがないとエラーになるという重大な欠陥があります。 では、どうすれば直るでしょうか。考えてみてください。
地味ですいません坂本でした。