phpのファイルの読み込み、上書き、追記を行うfopenのパラメーター(r,w,a)とfwriteについて

みなさん、こんにちは!

ブリュの公式ブログ.netにお越しいただきまして、ありがとうございます。

このサイトでは、ITについて特化したサイトを運営しています。

ここでは、phpのfopen関数について解説します。

また、fopen関数では、上書きするタイミングが異なります。

その点についても、詳細を解説していきます。

スポンサーリンク

fopen関数の構文

forenは、ファイルをオープンするための関数です。

構文は次のようになります。

$filepathに対象ファイルのパスを代入します。

fopen関数で、対象ファイルを開いています。

なお。パラメーターは、次のどれかを記述します。

fopen関数のパラメーター

fopen関数のパラメーターには、次のどれかを記述します。

用途に応じて使い分けてください。

パラメーター 意味
r 読み込み専用でファイルをオープンしています。

書き出しはできません。

r+ 読み込み/書き出しの両方でオープンします。

ファイルが存在しない場合、新規作成は行われません。

w 書き出し専用でファイルをオープンします。

ファイルを開いた時点で、ファイルが空になることに注意!

ファイルがない場合には新規作成が行われます。

w+ 書き出し/読み込みでファイルをオープンします。

ファイルを開いた時点で、ファイルが空になることに注意!

ファイルがない場合には新規作成が行われます。

a 書き出し専用でファイルをオープンします。

常に追記されます。

a+ 書き出し/読み込みでファイルをオープンします。

常に追記されます。

x 書き込み専用でファイルがオープンされます。

ファイルが存在したらエラーが出ます。

使ったことがないから詳細は知りません。

x+ 書き出し/読み込みでファイルがオープンします。

ファイルが存在したらエラーが出ます。

使ったことはないから詳細は知りません。

c 使ったことはないから詳細は知りません。
c+ 使ったことはないから詳細は知りません。
e 使ったことはないから詳細は知りません。

こんな感じですね。

普通はr, r+, w, w+, a, a+ぐらいしか使わないのではないでしょうか?

fwrite関数で書き込む!

fopen関数でオープンしたファイルに書き込む際には、fwrite関数を使います。

これでオープンしたファイルへの書き込みができます。

fclose関数でファイルを閉じる

fopenでオープンしたファイルは、プログラムが終了するまでにクローズしなければなりません。

ファイルを使い終わったらクローズしましょう。

ファイルのオープンから書き込み、クローズまでの一連の流れは次のコードになります。

これで、PHPからエラーも出力されなくなります。

上書きしたいときの2パターン

ここで、上書きしたいときの2パターンを紹介します。

ファイルを上書きするのは、既存のデーターを消して新しい情報を書きだすときなのか、古い情報と比較して新しい情報を残すときなのかで、上書きのタイミングが異なります。

既存のデーターを削除して新しいデーターを書き込みしたいとき

これは単純にパラメーターをwまたはw+にすれば大丈夫です。

ファイルをオープンした瞬間に古いデーターは削除されます。

古いデーターと新しいデーターの比較はできません。

新旧のデーターを比較してから書き込みたいとき

新旧のデーターを比較してから書き込みたいときには、とりあえずaまたはa+の追記モードでオープンしていください。

これで、ファイルをオープンした時点では、ファイル内に古いデーターは残っています。

個のデーターを読み込んで新旧のデーターを比較できます。

ただし、ファイルに書き込むときに注意が必要です。

ファイルに書き込むときには、そのままfwriteで書き込むと、単なる追記になってしまいます。

そこで、ファイルをいったん空にする必要があります。

それが次のphpコードです。

詳細を説明しましょう。

4行目のflock($fp, LOCK_EX);は、ファイルをロックしています。

上書きを行う際に、他のコードからアクセスがあると誤動作が起こるので、一時的に自身以外のアクセスを禁止します。

5行目のftruncate($fp,0);は、ファイルサイズを0にします。

これで、ファイルのデーターはすべて削除されます。

6行目のfseek($fp, 0);は、ポインタをファイルの先頭に移動させます。

これで、ファイルの先頭からデーターの記述が行われます。

6行目がなかったら、謎の空白ができてしまいます。

7行目でようやく書き込みです。

8行目でファイルのロックを解除します。

9行目でファイルを閉じます。

これが、新旧のデーターを比較したいときのファイルオープンと書き込みの方法です。

phpのforenとfwrite関数のまとめ

ここまで、phpのfopenとfwriteについて解説を行いました。

基本的にはfopenの時のパラメーターで挙動を指定できますが、細かい部分の設定は手打ちのプログラミングになってきます。

ただのファイルのオープンと書き出しですが、なかなか奥が深く、はじめてウェブサービスを作成する際の障壁になっている思います。

この記事が、そんな方の役に立てれば幸いです。

以上が、phpのfprenとfwrite関数のまとめでした!