この章ではプログラム上でのファイルの操作について説明します。
PHPでは簡単にプログラム上からテキストファイルなどに書いたり、またそのファイルのデータをプログラム上に読み込むことが出来ます。
以下のファイルはLesson38.htmlです。
ここから送信された名前、メールアドレス、コメント、性別をLesson39.phpに飛ばしてファイルに保存していきます。Lesson38.htmlは以下のような画面構成になります。 以下のファイルは「Lesson39.php」です。 ファイルの基本操作の流れは以下の通りになります。
〇ファイルを開く
〇その開いたファイルを読み込んだり、ファイルに書き込む
〇ファイルを閉じる
では1の「ファイルを開く」から説明していきます。fopen関数はファイルを開く関数です。 fopen関数でファイルを開きます。
ファイルのオープンに成功したらファイルハンドルを返します。
例の場合には$openにファイルハンドルが返されます。
ファイルハンドルとは現在どのファイルに対して操作を行っているかを区別するための名前です。
ファイルハンドル名を付けてからはそのファイルハンドルで実行するための指示を出します。
ファイルハンドルはファイルを操作するためのIDみたいなものです。
モード一覧の中にあるファイルポインタとは、ファイルに書き込んだり、ファイルを読み込んだりする位置のことです。
ではプログラム内の説明をしていきます。 ファイル名はを指定しています。
モードにを指定していますので、ファイルポインタは常にファイルの末尾なので、これまでのデータに追加して書くことが出来ます。
ファイルを開くことに成功しているのならば$openにはファイルハンドルが入っています。 もし、ファイルを開くのが失敗しているのならばが出力されます。
ファイルを開くのが失敗しているということは$openにはfalseが入っていることになります。
exit関数はメッセージを出力し、現在のプログラムを終了する関数です。
flock関数はファイルをロックする関数です。
戻り値は成功した時にTRUE, 失敗した時にFALSEが返されます
ファイルに何かを書くときに、複数の人が同時に同じファイルに書き込みを行うとファイルが壊れる可能性があるので、ファイルに書き込みを行う前にファイルをロックして、書き込んでいる間は他の人がファイルに書き込みを行えないようにするのがflock関数です。
つまり誰かが書き込んでいる間は書き込みを待ってもらうことが必要になります。
[ロックの種類] fputs関数はファイルポインタの位置に文字列を1行分書き込む関数です。
「長さ」は、指定した長さまで書き込んだら、書き込みが終了になりますが、この「長さ」は省略できます。
戻り値は成功したら書き込んだバイト数, 失敗したらFALSEが返されます。
この例では以下の箇所がファイルに書き込んでいる箇所です。 フォームのコメント欄からPOSTで送られてきたデータは以下のように$contentsに入れています。
$contentsには文字列連結演算子で名前、メールアドレス、コメント、性別、日付をつないだデータがカンマ区切りで入っています。
date関数の末尾にがありますが、これは改行を意味しています。
これは名前、メールアドレス、コメント、性別、日付を1行ごとに書きたいためです。
次は以下の箇所の説明をします。 =>ここではロックをここで解除しています。
解除するには第2引数にを付けてください。
次にファイルを閉じる方法について説明します。 戻り値は成功した時にTRUE, 失敗した時にFALSEが返されます。
この例では以下の箇所でファイルを閉じています。 最後にファイルを閉じるのですが、fclose関数がファイルを閉じる関数です。
ファイルを閉じるのに成功したのならばTRUE,失敗したのならばFALSEを返します。
AH.txtファイルには以下のように改行されて書き込まれます。
次は書き込んだファイルからデータを取り出す方法について説明します。
では、「”AH.txt”」に書き込まれたデータを取り出す方法について説明します。 今度はファイルからデータを読み込むので、モードはで指定しています。
初めにファイルが存在しているかどうかを調べ、その後に
ファイルの内容を読み込みます。 ファイルやディレクトリが存在するのかどうかを調べるにはfile_exists関数を使います。
戻り値はファイルが存在すればtrue,存在しなければfalseを返します。
この例の場合にはは存在しますのでTRUEになります。
次にファイルの内容を読み込みます。 この例では以下の箇所です。 fgets関数はファイルから文字列を1行分取得する関数です。
戻り値は成功したら取り出した文字列が返り, ファイルの終端もしくは行の末端の改行に達したらFALSEが返されます。
「1行分」とは行の中の改行までの部分です。
この関数を実行すると1行分しかデータを取得できませんが、whileと組み合わせることにより、すべてのデータを読み込むことが可能になります。
次にそのファイルの中身を区切り文字で区切って
表示させます。 =>explode関数は説明済みですが、もう一度復習してみましょう。 文字列を指定した文字で区切ります。
AH.txtファイルの内容を区切り文字「”,”」で区切リ取ると例えば という配列を作成されます。
あとは添え字を指定してそれぞれのデータを取り出します。 結果は以下のように表示されます。
カテゴリー