PHPでWebページを製作する時に必ずと言っていいほどよく使うファイル入出力についてです。
■ファイルからのデータ読み取り(入力)
一番簡単なのは以下のようなソースになります。
$filehandle = fopen("./test.dat", 'r');
while(!feof($filehandle)){
$buffer[] = fgets($filehandle);
}
fclose($filehandle);
これを実行すると、fopen関数の第一引数で指定したファイル(ここでは『test.dat』)のデータが$bufferという配列変数に格納されます。
ただ、このままだといくつかの問題が発生してしまう可能性があります。
★可能性1:指定したファイルが存在しない場合にエラーが出る。
★可能性2:ファイルは存在するが、何らかの影響でファイルの内容を読み取ることが出来なかった時にエラーが出る。
他にも可能性として考えられるものはありますが、多いのは上記2点だと思われます。これが発生してしまうとwhile関数の部分で無限ループに陥ります。
この問題を解決するには以下のように1行目を変更します。
if(!($filehandle = fopen("./test.dat", 'r'))){ die; }
while(!feof($filehandle)){
$buffer[] = fgets($filehandle);
}
fclose($filehandle);
fopen関数が失敗した場合にdie関数でプログラムを終了します。これにより無限ループに陥る事は無くなります。
またこのdie関数は以下のように第一引数に文字列を指定する事により、思い通りのエラーメッセージを表示する事もできます。
die("ファイルが存在しないか、ファイルを開く事ができませんでした。");
■ファイルへのデータ書き込み(出力)
一番簡単なのは以下のようなソースになります。
$filehandle = fopen("./test.dat", 'w');
fwrite($filehandle, "test");
fclose($filehandle);
これにより、fopen関数の第一引数で指定したファイル(ここでは『test.dat』)に『test』という文字列が書き込まれます。
こちらの場合も、データ読み込みの場合と同様にエラーが起こる可能性があります。(書き込む内容にもよりますが、こちらの場合は無限ループが起きる可能性は低いと思われます。)
なので、やはり1行目を変更します。
if(!($filehandle = fopen("./test.dat", 'w'))){ die; }
fwrite($filehandle, "test");
fclose($filehandle);
■今回のまとめ
ファイル入出力においては、
基本的にまずfopen関数を使用することになります。
その後、データ読み取りの場合でfget関数、データ書き込みではfwrite関数を使います
そして最後にfclose関数で終了する、という手順になります。
この他にも、いくつか使える関数がありますが、それはまた後日。
※ちなみにこの記事は過去に別ブログで掲載していたものを若干加筆修正したものです。