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

- 初心者用PHP入門 -




独習PHP 第3版
手を動かしながら学ぶPHP7。基本構文から、クラス、DB連携、セキュリティ対策まで。解説、例題、練習問題の3ステップでよくわかる。基礎からオブジェクト指向まで学べる定番入門書。

PHP逆引きレシピ 第2版 (PROGRAMMER’S RECiPE)
第2版では、最新のPHP(5.4/5.5)に対応したほか、レシピ全体の大幅な見直しを行い、データベースやテスト関連のレシピ拡充など、さらに内容充実・より便利になりました。サンプルプログラムのスマートフォン対応も行っています。実践で即役立つテクニックと開発ノウハウ、つまづきやすい・ハマりやすいポイントを徹底解説した「PHPユーザー必携の1冊」です。

PHPの絵本 第2版 Webアプリ作りが楽しくなる新しい9つの扉
HPは、さまざまなWebアプリケーションが簡単に作れそうなので、興味のある人は多いのではないでしょうか。本書は、イラストで解説しているので、難しい概念も直観的にイメージができ、理解が進みます。さぁ、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

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