この章ではプログラム上でのファイルの操作について説明します。
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ファイルの内容を区切り文字「”,”」で区切リ取ると例えば という配列を作成されます。
あとは添え字を指定してそれぞれのデータを取り出します。 結果は以下のように表示されます。
タグ: flock
アクセスカウンターを作成しよう
この章ではアクセスカウンターの作成方法について説明します。
アクセスカウンターはサイトに訪れた人数をカウントする機能です。
では例をみてみましょう。新たに「count1.txt」というファイルを作成してください。
アクセスをカウントするためには「その数を保存する媒体」が必要になりますので、この例ではアクセス数をファイルに記録します。
そして「count1.txt」の先頭行の左端に0と入力し保存します。
「count1.txt」の保存先はperlファイルと同じにしてください。 そこでseek 関数を使うと、現在のファイルの位置を移動することが出来ます。
seek 関数はファイルポインタを移動するための関数です。
ファイルポインタというのは、ファイルに書き込んだり、ファイルを読み込んだりする位置のことです。
つまり、ファイルの先頭や末尾など任意の位置まで移動させることが出来る関数です。
この例では読み書き用でファイルを開いているので書き込むときにはファイルポインタを先頭に戻さなくてはいけません。
seek関数を使ってファイルポインタを戻さないと以下のようにファイルポインタがずれてしまいカウントすることが出来ません。 例えばファイルの先頭に移動するには以下のように書きます。
つまり、ファイルの先頭から0バイトなので先頭を意味します。 ファイルの終端に移動するには以下のように書きます。
つまり、ファイルの終端から0バイトなので末尾を意味します。
Perlプログラムでファイルを扱う方法を知ろう
この章ではPerlプログラムの中でファイルを扱う方法を学習します。
Perlプログラムの中でファイルを読み込んだり、書き込んだり、削除したりすることが出来ます。
プログラムでファイルを操作するには初めに、対象のファイルを開くことが必要です。
そして、その開いたファイルをプログラム上に表示させたり、プログラムの中のデータをファイルに書き込んだりする操作を加えて、
最後にその開いているファイルを閉じると言う過程をたどります。
ではファイルの開き方から説明します。
ファイルを開くにはopen関数を使います。ファイルハンドルとは今どのファイルを実行しているのかを区別するための名前のことを言います。
つまり、ファイルを操作するためのIDみたいなものです。
ファイルハンドル名を付けてからはこのファイルハンドル名で実行するための指示を出していきます。
ファイルハンドルは大文字で付けるのが慣習になっています。
ファイルを開いたとは閉じなくてはいけませんが、それにはclose関数を使います。
close関数の引数にはファイルハンドルを入れます。 ではファイルにデータを書き込む例を見てみましょう。 では説明を始めます。 モードは「>」だけではないので、ファイルを開くときにはどのモードで開くのかを以下を参考に指定してください。 次にflock関数について説明します。 =>flock関数はファイルをロックする関数です。
ファイルに何かを記録するときに、複数の人が同時に同じファイルに書き込みを行うとファイルが壊れる可能性があるので、ファイルに書き込みを行う前にファイルをロックして、書き込んでいる間は他の人がファイルに書き込んだり読み込んだりを行えないようにすることが必要になります。
そのような時に使うのがflock関数です。ロックの種類は以下の通りですが、この例では書き込みを行っているので読み書き両方を禁止する2を指定してください。
ファイルロックは読み込み専用でファイルを開いている時にはflock関数は使う必要はありません。
つまりロックはしなくてもいいです。 次にファイルに書き込む方法について説明します。 ファイルに書き込みには以下の構文の通りprintを使います。
printの引数にはファイルハンドルと書き込む内容を書きます。
最後にflock関数をノンブロックモードでファイルロックを解除して、ファイルを閉じます。つまり、ロック解除してから、close関数でファイルを閉じます。 結果は以下のようにファイルに書き込まれます。 次は書き込んだ内容を画面に出力します。では解説をしていきます。
=>読込み用で開きますので、「<」を使用します。 =>ここではファイルの内容を読み込みます。
ファイルの内容を読み込むには以下の基本構文を使います。 この例では「<OUT>」です。
「<ファイルハンドル>」はファイルから1行ずつ読み込みを行います。
読み込んだ1行の末尾には改行記号が付いています。
ファイルの内容を出力する方法は3つあります。 そして、すべての内容を取り出したら、ファイルを閉じます。
ファイルを削除するには、unlink関数を使います。
戻り値には、削除したファイルの個数が返ってきます。
複数のファイルを削除するには以下の構文で書きます。
では例をみてみましょう。
戻り値には、削除したファイルの個数が返ってきますので、例えばファイルが存在しないなどの理由で0が返ってきたらFALSEになり、以下のprint文が出力されます。
ファイル名を変更したい場合はrename関数を使います。 成功時には1、失敗時には 0を返します。
では例をみてみましょう。