PHP入門 | テキストファイルの利用 | fputsを使ってファイルを保存する

それでは、今度はファイルを保存してみよう。これはfputsという関数を使う。次のような形で呼び出す。

fputs(ファイルポインタ, データ);

これだけでファイルへデータを保存できる。ファイルへ書き込むときに注意しなければならないのはアクセスモードである。書き込み用のアクセスモードは2種類あるので、間違えないようにしよう。

'w'を指定した場合は「上書きモード」である。すでにファイルがある場合、それを消して新しいファイルを作り、fputsで書いた内容を保存する。

'a'を指定した場合は「追記モード」である。すでにファイルがあるなら、そのファイルの末尾にfputsした内容を追加する。つまり、fputsでどんどんデータを追加していくのである。

用途に応じて、この2つのモードを使い分けられるようにしよう。では、簡単な例を見てみよう。

<?php
    // データを追加
    if ($_POST != null){
        $f = @fopen("data.txt",'a') or exit("ファイルを読み込めません。");
        if ($f != null){
            $s = $_POST['text1'];
            fputs($f,$s . "\n");
            fclose($f);
        }
    }
    // ファイルを読み込む
    $f2 = @fopen("data.txt",'r') or exit("ファイルを読み込めません。");
    $result = '';
    $i = 1;
    while(!feof($f2)){
        $s2 = htmlspecialchars(fgets($f2));
        if ($s2 != ""){
            $result = $i++ . ": " .$s2 . "<br>" . $result;
        }
    }
    fclose($f2);
?>
<!DOCTYPE html>
<html lang="ko">
    <head> 
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
        <title>sample page</title>
    </head>
    <body>
        <h1>Hello PHP!</h1>
        <form method="post" action="./index.php">
            <input type="text" name="text1">
            <input type="submit">
        </form>
        <hr>
        <p><?php echo $result; ?></p>
    </body>
</html>

これは簡単なメモを書けるアプリケーションである。入力フィールドからテキストを送信すると、その内容がファイルへ追加される。入力フォームの下には、保存されたメモが新しいものから順に番号付きで表示される。

ここでは「ファイルの保存」と「ファイルの読み込み」の両方を使っている。それぞれがどのように動いているか、詳しく見てみよう。ファイルアクセスができるようになると、このように少しずつ実用的なものを作れるようになる。

LinuxまたはMac OS環境でのファイル権限エラー
もしLinuxまたはMac OSでファイルへ追記できない場合は、ファイルに書き込み権限があるか確認しよう。権限がなければ、次のコマンドで書き込み権限を付与できる。

$ chmod 666 data.txt 

ファイル権限について詳しく知りたい場合は、Linuxコマンドについて調べてみよう。