ファイルの読み書き

プログラムが終わったあとも情報を残しておきたいことがよくあります。

そこで、ファイル処理が必要となります。

ここでは、テキストファイルを作って、読み込む作業を解説します。

さっそくですが、サンプルプログラムを示します。


<html>
<head><title>ファイル処理</title></head>
<body>
<?php
//①test.txtというファイルをつくる
if($file=fopen('test.txt','a')){
    $a=array('A','B','C');
    $b=array('D','E');
    //$aをファイルに書き込む
    fputs($file,serialize($a)."¥r¥n");
    fputs($file,serialize($b)."¥r¥n");
    fflush($file);
    fclose($file);
}
//②test.txtを読み込む
if($file=fopen('test.txt','r')){
    //1行ずつ読む
    while (FALSE !== ($line=fgets($file))){
        $a=unserialize($line);
        //一行を表示する
        echo '<pre>';
        print_r($line);
        print_r($a);
        echo '</pre>';
    }
    fclose($file);
}
//③ファイルを削除する
unlink('test.txt');
?>
</body>
</html>

>>プログラムの結果はこちら

長いので順に説明します。

①ファイルの作成

このプログラムでは、ファイル「test.txt」をphpファイルのある場所に作って A,B,C D,E という文字を記入します。

ファイルの作成の際はfopen、fputs,fflush,fcloseを使います。

まず、fopenでファイルを作成します。


resource fopen(ファイル名,モード文字列)

もし、ファイルをつくれたらファイル処理に必要な値が出てきます。

失敗するとfalseを返します。 そして、モード文字列には主に

  • w:書き出し
  • a:追加の書き込み
  • x:新規ファイルの作成

があります。xはもしファイル名が存在したらエラーとなります。

ですから、新規ファイル作成用のモードです。

wとaの違いですが、wの場合はファイル名が存在したら、ファイルを一新して書き込みを開始します。

一方、aの場合はファイル名が存在したら、ファイルに付け加えながら書き込みます。

例えば、 test.txtに「ABC」 とあり、wを使って「DEF」を書き込むと 「DEF」 となり、aを使って書き込むと 「ABCDEF」 となります。

そしてファイルを開いた後は、


int fputs(ファイルのリソース,文字列)

で書き込みます。

改行はしてくれないので、必要なら”¥r¥n”を加えましょう。

fputsだけでは書き込まれないので


bool fflush(ファイルリソース)

で書込みを決定します。 よって、まとめると


fputs(ファイルのリソース,$a."¥r¥n");

fflush(ファイルのリソース);

という流れになります。 配列の情報を保存する場合は


string serialize(配列)

を使います。 最後にファイルの書込みが終わったら


bool fclose(ファイルのリソース)

で終わります。

②ファイルの読み込み

その後、再びtest.txtを一行ずつ読み込みます。

一行読み込んだ後、$aに要素を代入して出力します。

よって $a={A,B,C} $a={D,E} と順に出力されます。

ファイルを読み込む際は、書込みと同様に


resource fopen(ファイル名,'r')

を使用します。書込みの際は、rがwやaでしたが、読み込みの際はrとします。 読み込み後は、


string fgets(リソースファイル)

より1行ずつファイルを読み込みます。 もし配列をserializeで保存していれば


mixed unserialize(文字列)

で元に戻すことができます。 最後にcloseでファイルを閉じましょう。

③ファイルの消去

最後につくったファイルを消去して終わります。 ファイルの消去は


bool unlink(ファイル名)

を使います。

著者:安井 真人(やすい まさと)