初心者用PHP入門へようこそ 当HPは初心者のためにPHPを解説しています。

- 初心者用PHP入門 -


ApacheやIISなどの主要なWebサーバ上で動作するサーバサイドスクリプト実行環境であるPHPについて、基本構文やオブジェクト指向構文、関数などを解説。例題や練習問題も付す。PHPバージョン5.1に対応。
PHPスクリプティングの決定版サンプル集が最新のPHP5に対応して登場。実用的なサンプルを自力で動かす感動を通して、PHPの使い方や実装方法が自然と身に付きます。付録CD-ROMにはWebサーバなど関連ツールもすべて収録。

ファイルの読み書き

 PHPのファイルの扱い方について理解しましょう。 サーバーはファイルを扱うためにファイルポイントという専用のしおりを使います。 ファイルポインタは現在ファイルをどこまで読んだか、書いたかを示します。 まずファイルを扱う場合、そのファイルをオープンする必要があります。 ファイルをオープンするには以下のようにfopen関数を使う必要があります。 初期状態では、ファイルポインタはファイルの先頭位置に設定できます。

ファイルポインタ = fopen("パスを含めたファイル名", "モード")

ファイルオープン時のモードには以下のようなものです。

モード内容
"r"読み取り専用
"r+"読み取りと書き込み
"w"書き込み専用(ファイルがなければ自動生成)
"w+"書き込みと読み込み(ファイルがなければ自動生成)
"a"追記専用(ファイルがなければ自動生成)
"a+"追記と読み込み(ファイルがなければ自動生成)

 ファイルを開くと、サーバーは自由にその中身を閲覧できます。 ファイルの中身を見て情報を取得するには、行単位で取得するfgetsや文字単位で取得する fgetcを使います。どちらも現在のファイルポインタの位置から読み込みを始めます。

その行の文字列 = fgets(ファイルポインタ [, 読み込みバイト数]) その場所の文字 = fgetc(ファイルポインタ)

また、ファイルを書き込む場合はfputsを使います。fputsは ファイルポインタの場所に、文字列を1行書き込みます。

fputs(ファイルポインタ, "書き込む文字列"[, 書き込みバイト数]);

そして、ファイルの作業が終わるとfclose関数でファイルをクローズしなくてはいけません。

fclose(ファイルポインタ);

それでは今までのファイルの扱い方を参考にして アクセスログを表示するスクリプトを作成しましょう。

<html> <head><title>accesslog.php</title></head> <body> <?php print(date("Y/m/d H:i:s ") . "<br /> \n"); print("<p> access log : </p> \n"); $filepointer=fopen("./log/php-accesslog", "a+"); flock($filepointer, LOCK_EX); fputs($filepointer,date("Y/m/d H:i:s ") . $_SERVER["REMOTE_ADDR"] . "\n"); flock($filepointer, LOCK_UN); rewind($filepointer); while(!feof($filepointer)){ $fileline = fgets($filepointer); print($fileline . "<br />"); } fclose($filepointer); ?> </body> </html>

実行結果を見る

では、スクリプトの内容を見てみましょう。

$filepointer=fopen("./log/php-accesslog", "a+");

fputs($filepointer,date("Y/m/d H:i:s ") . $_SERVER["REMOTE_ADDR"] . "\n");

fopen関数でlogディレクトリ以下にphp-accesslogというファイルを 追記+読み取りモードでオープンして、fputs関数で日付とIPアドレスを書き込みます。

flock($filepointer, LOCK_EX);

flock($filepointer, LOCK_UN);

flock関数で、誰かが書き込んでいるときに他の人が書き込めないようにファイルをロックします。 LOCK_EXでロックして、LOCK_UNでロックを解除します。 同時書き込みによりデータの破損を防ぐ必要があります。

rewind($filepointer);

while(!feof($filepointer)){ $fileline = fgets($filepointer); print($fileline . "<br />"); }

rewind関数はファイルポインタを最初に戻す関数です。 feof関数はファイルポインタが終端に達したときにTRUEを返します。 ここではwhile文でfeof関数がTRUEじゃない間繰り返し処理を行い 終端に達してTRUEを返したらwhile文を終了します。 while文の中ではfgets関数でファイルから一行づつ読み込んで改行をいれています。

fclose($filepointer);

最後に必ずファイルをクローズします。



[戻る]  [TOP]  [次へ]


This website is link free.
All graphics and page design, Copyright © 初心者用PHP入門
since 2005.12.10

スポンサー
脱ステロイドダイエットホテル/