テキストファイルの入出力

(ブログ記事の一覧は「こちら」)

PHPはサーバーにあるテキストファイルの書き込みや読み込みができます。これを利用するとアクセスログのような情報を保存するような仕組みを作成できるようになります。

ここで学ぶこと

  • テキストファイルの書き込み/読み込み
  • date関数(日付/時刻を書式化)

参考:

file_put_contents(PHPマニュアル)
file_get_contents(PHPマニュアル)

fopen(PHPマニュアル)
flock(PHPマニュアル)
fputs(PHPマニュアル)
fgets(PHPマニュアル)
fclose(PHPマニュアル)

date(PHPマニュアル)

例題1

file_put_contents, file_get_contents 関数を用いた、サーバーへのテキストファイルの書き込み/読み込みを行うプログラムを作成します。

プログラム

まずはテキストファイルの書き込みを行います。
下記のコードを「file_put_contents_test.php」として作成してください。

<?php
    $file_name = 'file_io_test.txt';
    $data = "こんにちは!<br>";
    file_put_contents($file_name, $data);
?>

次にテキストファイルの読み込みを行います。
下記のコードを「file_get_contents_test.php」として作成してください。

<?php
    $file_name = 'file_io_test.txt';
    $data = file_get_contents($file_name);
    echo $data;
?>

実行、確認

まず「file_put_contents_test.php」を実行すると、PHPファイルと同じ場所にテキストファイル「file_io_test.txt」が生成されていることを確認してください。
次に「file_get_contents_test.php」を実行すると、テキストファイルの内容が表示されることを確認してください。

例題2

fputs, fgets 関数を用いて、例題1と同じ処理を行うプログラムを作成します。

プログラム

まずはテキストファイルの書き込みを行います。
下記のコードを「fputs_test.php」として作成してください。

<?php
    $file_name = 'file_io_test2.txt';
    $data = "こんにちは!<br>";

    $fp = fopen($file_name, 'w');
    if ($fp) {
        if (flock($fp, LOCK_EX)) {
            if (fputs($fp, $data) === FALSE) {
                print('failure to write fp');
            }
            flock($fp, LOCK_UN);
        }
    }
    fclose($fp);
?>

次にテキストファイルの読み込みを行います。
下記のコードを「fgets_test.php」として作成してください。

<?php
    $file_name = 'file_io_test2.txt';
    $data = file_get_contents($file_name);

    $fp = fopen($file_name, 'r');
    if ($fp) {
        if (flock($fp, LOCK_EX)) {
            $data = fgets($fp);
            flock($fp, LOCK_UN);
        }
    }
    fclose($fp);

    echo $data;
?>

実行、確認

まず「fputs_test.php」を実行すると、PHPファイルと同じ場所にテキストファイル「file_io_test2.txt」が生成されていることを確認してください。
次に「fgets_test.php」を実行すると、テキストファイルの内容が表示されることを確認してください。

課題1

例題では、書き込みの処理を行っても常に同じテキストが書き込まれるだけでした。(つまり、上書きされていました。)
例題のプログラムを修正して、書き込みの処理を行うたびに、テキストが追記されるようにしてください。
(file_put_contents, file_get_contents 関数、またはfputs, fgets 関数のどちらを使っても構いません。)

課題2

これまでの内容を参考に、アクセスログの仕組みを作成してください。
アクセスログとは、サーバーのあるページにアクセスしたときの通信記録を履歴として保存することです。)
ログファイルとして、通信記録の履歴をテキストで追記して保存してください。

通信記録は、以下の情報を含めるようにしてください。

<?php
    // 現在時刻
    $current_date = date("Y/m/d H:i:s");
    // IP アドレス
    $ipadrs = $_SERVER["REMOTE_ADDR"];
?>