この
fileによるファイルの読み込みよりも更に柔軟な対応が必要となった場合には、PHPに用意されているもっとも基本的なファイルアクセスの関数を組み合わせて利用することになります。これは、3段階の手続きでファイルにアクセスをします。
1.ファイルを開く$変数 = fopen( ファイルの指定 , モード指定 );
まず最初に、「
fopen」という関数を呼び出します。これは、引数に指定したファイルを開き、そのファイルにアクセスするための「
ファイルポインタ」と呼ばれるものを返します。ファイルにアクセスる場合は、必ずこの
fopenでファイルを開きます。
2つ目の引数にある「
モード指定」というのが、
fopenのポイントとなります。これは、そのファイルの
アクセスモードというものを指定するものです。
アクセスモードとは、そのファイルをどういう種類のファイルとして扱うか、どういうアクセスを許可するか、といった設定を行うものです。このモードは、以下の記号を使って指定します。
・fopenのモード指定用の記号r ――読み込み専用で開く
r+ ――読み込み・書き出し用に開く
w ――書き出し専用で開く
w+ ――読み込み・書き出し用に開く
a ――追記モードの書き出し専用で開く
a+ ――追記モードの読み込み・書き出し用に開く
x ――書き出し専用で開く。既にファイルがある場合にはエラーになる
x+ ――読み込み・書き出し用に開く。既にファイルがある場合にはエラーになる
b ――バイナリモードで開く
t ――テキストモードで開く
2.データにアクセスするファイルを開いたら、次に行うのは、そのファイルから必要なデータを読み込んだり、データを書き込んだりといった作業を行います。これには「
fgets」「
fputs」といった関数が用意されています。(それぞれについては後述)
3.ファイルを閉じるfclose( ファイルポインタ );
データアクセスが完了したら、最後にファイルを閉じます。これは「
fclose」という関数で行います。引数には、
fopenで得られた
ファイルポインタを指定します。
なぜ、
fopenでファイルを開き、
fcloseで閉じる、といった作業をしないといけないのか? それは、これらによってファイルアクセスの権利が設定されるためです。通常、コンピュータのアプリケーションなどでファイルを利用する場合、あるアプリケーションが使用中だと、他のファイルで開けなかったり、ファイルの削除などが行えなくなりますね? あれは、「このアプリが使用中だ」ということを示し、他のプログラムからアクセスできないようにしているからです。
もし、複数のプログラムで同時にファイルアクセスできてしまったら、その内容が想像していなかった形に書き換えられてしまう可能性があります。ファイルに書かれたデータが壊れたりしないよう、「ファイルを利用できるのは一度に一つのアプリのみ」となっていたのです。
fopenと
fcloseも、これと同じことを行っているのです。
fopenでファイルを開くと、それ以外のプログラムが勝手にこのファイルを開いて中身を書き換えたりできなくなります。そして
fcloseでファイルを開放して初めて他のプログラムがファイルを使えるようになる、というわけです。