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

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

これまでは学習でのファイル操作は、ファイルの準備が正しく出来ていることが前提でした。しかし、実際は読み込むための「ファイルが無い」、書き込むためのファイルが「書き込み禁止」という場合も当然出てきます。
例えば10.3.2項で作成した、「fileInOutData.php」を実行する時に、「subject_data.csv」が無い場合や、または「statistics.txt」が読み取り専用になっている場合はエラーになってしまいます。


図 10.4.1: ファイル操作が行えない

ファイル操作を行う時には、上記のようなケースを想定して事前確認を行う必要があります。この事前確認もファイルシステム関数を使うことで簡単に行えるようになっています。

  • file_exists :指定ファイル(フォルダー)の存在を確認します。
  • is_readable :指定ファイルが存在し、読み込み可能か確認します。
  • is_writable :指定ファイルが存在し、書き込み可能か確認します。

ではファイルの事前確認を行うプログラムを作成してみましょう。

ファイルの事前確認を行うプログラム

読み込みファイルと書き込みファイルが操作できるかを事前にチェックして、操作が行えない場合はエラーメッセージを画面に表示しプログラムを中断します。

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

fileCheck.php

実行結果

■読み込みファイルが無い場合

■ファイルに書き込めない場合

※上記の確認を行う場合は「statistics.txt」ファイルのプロパティ
を開き、読み取り専用にチェックを入れます。

■2つのファイルの状態が正常の場合
10.3.2項で作成したfileInOutData.phpの実行結果と同じになります

解説

今回のプログラムは10.3.2項で作成したfileInOutData.phpに、ファイルの事前確認処理を追加した内容になっているため、その部分についてのみ解説を行います。

8~11行目の処理で読み込みファイルがあるかの確認を行っています。is_readable関数はファイルがありかつ読み込める場合に戻り値「true」を返すので、「!」で結果を反転させます。そうすることで8行目のif文では読み込むファイルが無い場合にifブロック内の処理を行うことになります。
9行目でエラーメッセージを表示し、データが読み込めない状態でそれ以降の処理を行ってもエラーになるので10行目のexit関数でプログラムを強制終了させています。

31~37行目の処理が、書き込みファイルへ書き込みが行えるかの確認を行っています。
先ず初めに31行目でfile_exists関数を使って、書き込みファイルが存在するか確認しています。書き込み処理は読み込み処理と違って、ファイルが無くても新規でファイルを作成するため既にある場合に書き込めるのか確認を行えばいいことになります。
ファイルが存在すればis_writable関数を使って書き込みが可能なのか確認します。この関数は書き込める場合戻り値「true」を返すため、「!」で結果を反転させて、33行目のif文で書き込めない場合、ifブロック内の処理を行うようにしています。
読み込みファイルのチェック同様に34行目でエラーメッセージを表示し、以降の処理を行わないように35行目でexit関数で強制終了させています。

ファイルの状態が必ず問題ないと保証されている場合、事前チェックは必要ありません。しかしプログラムの世界では起こりえる可能性に対して、事前確認を入れておくことが当然になります。
事前確認は面倒かもしれませんが、しっかりと行うように覚えておきましょう。

NEXT>> 10.5 ファイルをアップロードしてみよう