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

- 初心者用PHP入門 -



PHPの本
よくわかるPHPの教科書

ノンプログラマに最適。「誰にでも伝わる教え方」で、最初の一歩から実用レベルまで解説しました。「プログラミングに拒否感がある」「他の入門書で挫折したことがある」そんな方でもこの本ならスイスイ読めます。
PHPの本
PHP 逆引きレシピ

いまさら聞けない・誰も教えてくれない本当に必要な知識と技を一冊に凝縮。困ったときにすぐ引ける!実践で即役立つテクニックと開発ノウハウ、つまづきやすい・ハマりやすいポイントを徹底解説。Windows/Mac対応 PHP5.3対応。
PHPの本
PHPによるWebアプリケーションスーパーサンプル 第2版

PHPスクリプティングの決定版サンプル集が最新のPHP5に対応して登場。実用的なサンプルを自力で動かす感動を通して、PHPの使い方や実装方法が自然と身に付きます。

ファイルの読み書き

 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

スポンサー
脱ステロイドお腹が鳴る臭い対策