| チュウトリアル | |
| |TOP| |1||2||3||4||5||6||インスト1||インスト2||インスト3||Linux| | |
4.カウンタを作ろう〜ファイル操作 処理の流れ 今回はカウンタを作ってみましょう。カウンタはページを訪れるごとに数字が増えていくという風にすればよいのです。
ファイルを読んだり書き込んだりするにはfopen()関数を使います。 ファイル操作ここでfopen()関数について解説します。fopen()は、ファイルを扱うスクリプトではよく使うので覚えましょう。 $fp = fopen ( ファイル名 , モード ); fopenは上記のように指定します。$fp にはファイルポインタが返されます。 1番目のファイル名は "log.log" や ”./log/data.log" のように書きます。 2番目のモードは次の様になります。読み書きとポインタの位置により異なります。
fopen()で開いたら、fclose()関数で閉じる必要があります。 では、早速!ファイルの操作を覚えたところでカウンタを作ってみましょう。ファイル名はcount.txtとします。0とだけ書いて保存してください。Linuxでは666にしておきます。ポインタというのはファイル内の位置を示します。 カウンタでは読み込んだ後に書き込むので'r+'モードでファイルを開きます。上ではゴミがつくと書きましたが、カウンタではデータは増えてく(99→100:2バイトから3バイト)ので問題ありません。 $fp = fopen
("count.txt","r+"); 次に前回のカウント数を読み込みます。読み込みにはfgets()を使います。 $count = fgets ($fp, 32); これは32バイトまで読み込むという事ですが、その前に改行やEOFがあればそこまでです。特に32バイトの意味はないです。 $count++;
詳しくはマニュアル第9章
式 を見てください。後置加算と言います fseek($fp, 0);
最後にファイルを閉じて結果を表示します fclose($fp);
一応完成なのですが、ファイルのロックを加えておきましょう。ロックというのは自分が書き込もうとしている時に割り込んできて書き込もうとする奴が現れて、ファイルが壊れてしまうのを防ぐ為にかぎを掛けることです。 flock($fp,2); /* PHP4.0.1以降は2をLOCK_EXとします */ ついでにカウンタの桁数を0で補うようにすることにします。sprintfでフォーマットします。 $count = sprintf("%05d", $count); まとめると次のようになります
<?php
$fp = fopen("count.txt","r+"); // 読み書きモードでオープン
flock($fp, LOCK_EX); // 書き込みロック
$count = fgets($fp, 32); // 32バイトorEOFまで取得
$count++; // カウントアップ
fseek($fp, 0); // ポインタを先頭に戻す
fputs($fp, $count); // 書き込み
fclose($fp); // ファイルを閉じる
printf("%05d", $count); // 5桁にそろえて表示
?>
結果 326547 応用編〜IP重複をカウントしない宿題? ヒント?
LastModified July 22 2002 16:01:40
|
| |HOME||チュウトリアル||使用上の注意||スクリプト||無料鯖情報||BBS||リンク| Copyright(C) 1999-2001 ToR all rights reserved. |