第10章 ファイルを操作してみよう

10.3 ファイル出力処理

ファイル出力処理とは、外部のファイルへプログラム内からデータを書き込むことを指します。ファイル出力処理を行いたい場合も、ファイルシステム関数を利用することで行えます。
ファイル出力処理では、以下に示すファイルシステム関数を利用していきます。ファイル入力処理に比べると利用する関数は少ないので簡単です。

  • fopen関数:ファイルをオープンする。(書き込みモード)
  • fputs関数:ファイルにデータを書き込む。
  • fclose関数:ファイルをクローズする。

詳しい関数の使い方や説明は、ファイル入力処理同様にサンプルプログラムと合わせて説明していきます。

10.3.1 ファイルへデータを書き込んでみよう

ファイルへデータを書き込むためには、ファイル入力処理と同じように「fopen関数」でファイルをオープンする必要があります。入力処理とは違って、第2引数に書き込みモードを設定します。

書式:ファイルオープンとデータ書き込み

凡例:ファイルオープンとデータ書き込み

fopen関数でファイルをオープンする時に書き込みモード「w」を指定します。「w」を指定すると新規書き込みになり、指定ファイルが既にあれば内容を初期化し、なければ新規でファイルを作成してくれます。追加書き込みを行いたい場合は書き込みモード「a」でファイルをオープンしてください。
そして、fputs関数に「位置情報(ファイルポインタ)」と「書き込みたい文字列」を設定すれば、オープンしたファイルにデータを書き込むことができます。次の書き込み文字列を改行したい場合は、書き込みたい文字列の最後にエスケープシーケンスの「\n」を入れましょう。

ポイント
  • 新規書き込みモードでファイルをオープンしたい場合は、第2引数に「w」を設定する。
  • 追加書き込みモードでファイルをオープンしたい場合は、第2引数に「a」を設定する。
  • オープンしたファイルにデータを書き出すには、fputs関数を利用する。
  • 次の書き込みデータを改行したい場合、書き込み文字列の最後に「\n」を追加する。

ファイルへデータを書き込むプログラム

繰り返し処理を使って配列変数に用意したデータ全てをファイルへ書き込みます。

ソース・フォルダー: myproj_basic/ch10
パッケージ: writeFileData.php
アクセスURL:http://localhost/myproj_basic/ch10/writeFileData.php

writeFileData.php

実行結果

Webブラウザ上の実行結果はメッセージが表示されるだけのため、プログラム実行後は手順に従い書き込みファイル「output.txt」の確認を行って下さい。

書き込みファイルoutput.txtの確認

①プログラム実行後の状態


図 10.3.1: 書き込みファイルの確認手順1

②フォルダーの更新


図 10.3.2: 書き込みファイルの確認手順2

③書き込みファイルの表示確認


図 10.3.3: 書き込みファイルの確認手順3

④書き込みファイルの内容を確認


図 10.3.4: 書き込みファイルの確認手順4

解説

8行目で書き込みに利用するデータをarray関数を使って準備しています。

11行目でfopen関数を利用して「output.txt」ファイルを、新規書き込みモード「w」でオープンしています。書き込みモードでオープンしても、戻り値は読み込みモードと同じ「位置情報(成功時)」になります。

14行目ではfputs関数を利用して、タイトルの文字列を改行付きで書き込みます。

17~19行目では配列データをforeach文で繰り返し、データの数だけ書き込みを行っています。

21行目では書き込みが終わったメッセージをWeb画面に表示しています。

24行目ではオープンしたファイルをクローズします。書き込みモードでも忘れずに最後に行います。

ファイルクローズ処理

ファイルオープンを行った場合、ファイルクローズは必ず行ってきましたが、実はクローズ処理を行わなくてもファイル操作への影響はありません。しかし、ファイルをクローズしないままのアプリケーションへアクセスが集中すると、サーバのメモリが不足して動作しなくなる可能性が出てきます。開けた扉は閉めるように、ファイルをオープンしたら必ずクローズするものと覚えておきましょう。
ファイルクローズを行うタイミングも重要になってきます。もしも読み出し、書き込み途中でファイルをクローズしてしまうと、それ以上ファイルへの操作が行えなくなってしまいプログラムが正しい動作になりません。
クローズ処理は忘れずに行う必要がありますが、そのタイミングにも気をつけておきましょう!

次項では、これまで学習したファイル入力と出力を両方使用したプログラムを見て行きましょう。

10.3.2 ファイル入力と出力を1つのプログラムで行ってみよう

ファイルを操作するプログラムでは、ファイルのデータを読み込んで処理した結果を別のファイルへ書き出すといったケースがよくあります。そのようなケースについて、実際にサンプルを使用して学習していきましょう。

読み込みファイルデータを元に統計情報をファイルに書き込むプログラム

読み込んだファイルの点数データを使って、統計情報(合計、平均)をファイルへ書き込む処理を確認します。

ソース・フォルダー: myproj_basic/ch10
パッケージ: fileInOutData.php
アクセスURL:http://localhost/myproj_basic/ch10/fileInOutData.php

fileInOutData.php

実行結果

書き込みファイルstatistics.txtの確認

前項で行った手順を実施し、書き込みファイル「statistics.txt」を開き内容を確認します。

図 10.3.5: statistics.txtの確認

解説

8行目では10.2.3項で作成したcsvファイル「subject_data.csv」を、読み込みモードでファイルをオープンします。今回のプログラムではこのファイル内のデータを利用して統計情報を出力していきます。

11~20行目でファイルデータを全て読み込んでいます。また、データはcsv形式のためfgetcsv関数で1行づつ配列データとして読み込んでいます。
19行は合計点を求めるため、点数データを変数$totalに加算しています。

22行で読み込みファイルをクローズし、ファイル読み込みメッセージを画面に表示します。

26行目で書き込みファイル「statistics.txt」をオープンします。

29~31行目で読み込んだデータ数分だけ、「科目名<—>点数」形式+「\n」改行付きで書き込んでいます。

34行目は11~20行のループ内で求めた、合計点を書き込んでいます。

37行目では合計点をデータの総数で割って、平均点として書き込んでいます。

40行目で書き込みファイルをクローズし、ファイル書き込みメッセージを画面に表示します。

今回のプログラムはこれまで学習してきた内容で、読み込んだファイルデータを使ってその結果を別のファイルへ書き込むことがポイントになります。
ファイルの出力結果からも、正しく書き込み処理が行われているのが確認できます。

NEXT>> 10.4 ファイル操作のための事前確認を行う