ファイルを使ったプログラム
いままで紹介してきた例題のプログラムではデータが毎回消えてしまいました。
しかし、実際にはデータを保存しておいて、実行時にはそのデータを使って動作するようなことが多いと思います。
こういう場合、2つの方法があります。
- テキストファイルにデータを保存しておく。
- データベースにデータを保存しておく。
このセクションの説明はテキストファイルにデータを保存しておくプログラムを説明します。
アクセス・カウンタの作成
ここまで読み進んでいれば、アクセス・カウンタを作ることができます。ここではグラフィック・アクセス・カウンタをPHPで作ってみましょう。
プログラムを作る前に、アクセスカウンタの動作原理を考えてみます。
- カウント・データを保存するテキスト・ファイルがなければ新規にファイルを作ります。
- 直前のアクセス数をファイルから取得します。
- 取得したアクセス数に1加え、今回のアクセス数とします。
- 今回のアクセス数をファイルへ保存しておきます。
- 今回のアクセス数を使って<img>タグを生成します。
アクセスカウンタは色々なページで使う可能性のあるプログラムですから、
これだけで別のファイルにしてPHPを書きます。実行時はindex.phpをブラウザで表示してください。
なお、このプログラムを実行するには、0.gif〜9.gifのファイルが必要です。
count.php
<?php
// アクセスカウンタの桁数を定義
define(count_length, 5);
// データの保存場所を定義
define(data_dir , "./data/");
define(data_file, "count.txt");
$data_path = data_dir . data_file;
if (file_exists($data_path)) { // データ・ファイルがあるかをチェック
// データファイルがあるのでカウント数を更新
$fp = fopen($data_path, "r+"); // ファイルを読書き可能でオープン
// 直前のカウント数を取得
// キャストして強制的に整数型にしている
$count = (int)fgets($fp);
fseek($fp, 0, SEEK_SET); // ファイル・ポインタを先頭に移動
fputs($fp, ++$count); // 現在のカウントをファイルへ保存
fclose($fp); // ファイルを閉じる
}
else {
// データ・ファイルがないので作成
@mkdir(data_dir , 0777); // 保存するディレクトリを作成
$fp = fopen($data_path, "w"); // ファイルを新規生成
fputs($fp, "1"); // カウンタの初期値を1とする
fclose($fp); // ファイルを閉じる
$cnout = 1; // 現在のカウント数を1とする
}
// IMGタグの生成
$buf = sprintf("%0" . count_length . "d", $count);
for ($i = 0; $i < count_length; $i++) {
echo "<img src=\"" . substr($buf, $i, 1) . ".gif\">";
}
?>
|
index.php
<html>
<body>
<p>カウンタはうまく表示されますか?</p>
<?php require("count.php") ?>
<p>ページを更新するとカウントUPするはずです。</p>
</body>
</html>
|
新たに出てきた関数がいくつかありますが、これらはCの関数とほぼ同じです。
説明は書きませんので、詳しくは「日本PHPユーザー会」のオンライン・ドキュメントを参照してください。
このカウンタの実行結果
戻る
|