【PHP】ファイルを開く関数「fopen()」、ファイルを閉じる関数「fclose」

Pocket

今回はPHPで使用できる、メモ帳などのファイルを開いたり閉じたりする関数、「fopen()」と「fclose()」を使用してみます。
ファイル操作の起点となるPHP関数なので、ファイルの読み込み、書き込みをするためには必須の関数です。

ファイルを開く関数「fopen()」

第一引数に読み込みたいファイル名を記述します。
第二引数に、ファイルを開くモードを設定します。このファイルを開くモードによってファイル内の内容を取得したり、ファイル内にデータを書き込んだりします。モードとの組み合わせによっては、読み込もうとしたファイルが存在しない場合、第一引数に設定した名称でファイルを新規作成します。

「fopen()」のモード

モード 動作 ファイルポインタ ファイルが存在しない場合
r 読み込みのみでオープン。 先頭 エラー
r+ 読み込み/書き出し用にオープン。 先頭 エラー
w 書き出しのみでオープン。
ファイルサイズをゼロにしてデータを書き込む。
先頭 ファイルを新規作成
w+ 読み込み/書き出し用にオープン。
ファイルサイズをゼロにしてデータを書き込む。
先頭 ファイルを新規作成
a 書き出しのみでオープン。
データは追記で書き込みを行う。
末尾 ファイルを新規作成
a+ 読み込み/書き出し用にオープン。
データは追記で書き込みを行う。
末尾 ファイルを新規作成
x 書き出しのみでオープン。
ファイルを新規作成しデータを書き込む。
先頭 エラー(※この関数はファイルが存在する場合にエラーが発生)
x+ 読み込み/書き出し用にオープン。
ファイルを新規作成しデータを書き込む。
先頭 エラー(※この関数はファイルが存在する場合にエラーが発生)
c 書き出しのみでオープン。
ファイル内のデータはそのままで追記。
先頭 ファイルを新規作成
c+ 読み込み/書き出し用にオープン。
ファイル内のデータはそのままで追記
先頭 ファイルを新規作成

これらのモードを第二引数に設定することで、ファイルのデータを取得したり、書き込んだりすることができます。
各モードの動作を確認する為に、サンプルコードとサンプルファイルを用意しましょう。
今回はメモ帳を使用したサンプルファイル「test.txt」を用意し、ファイル内に「123」というデータを記述し保存します。

fopen00

 

サンプルコード:モード「”r”」

「”r”」はファイルを読み込み、データを取得するモードです。サンプルファイル「test.txt」からデータを取得してみます。
「fopen()」の「”r”」モードはあくまでデータの読み込みようでファイルを開く関数であり、データの取得は「fgets()」関数で行います。

実行結果です。
fopen01

メモ帳内のデータを取得し、変数に格納、出力するすることが確認できました。

 

サンプルコード:モード「”w”」

「”w”」はファイルを書き出し用でファイルをオープンします。書き出し用のモードは他にもありますが、「”w”」の特徴は「ファイルサイズを一度ゼロにしてからデータを書き出す」ことです。「メモ帳のファイル内を白紙に戻してから記述する」という動作と考えれば分かりやすいかもしれません。

 

ブラウザを読み込んでプログラムを実行します。メモ帳のファイルが以下のように書き換わっているはずです。
fopen02

メモ帳に保存されていた「123」がなくなり、「fwrite()」によって文字列が書き込まれています。「fopen(“test.txt” , “w”)」でファイルを開いた時点で、ファイル内のデータが白紙になっていることがモード「”w”」の特徴的な動作なんですね。

サンプルコード:モード「”a”」

モード「”a”」は「”w”」と同じ書き出し用でオープンしますが、ファイル内のデータはそのままで、データの末尾から書き出しを行っていきます。

 

ブラウザを一回読み込んで、プログラムを実行します。実行結果として「test.txt」内のデータを確認します。

fopen03

モード「”a”」は末尾からデータをどんどん追記していきます。モード「”w”」のようにデータを初期化しないので、データを蓄積していくプログラムに適しています。どんどん追記していくので、ブラウザを再び読み込んでみると以下のようになります

fopen04

 

サンプルコード:モード「”x”」

モード「”x”」は書き込み用でファイルをオープンというより、「ファイルを新規作成」してオープンします。
この動作の為、他のモードとは少し違い、第一引数に指定したファイルが存在する場合エラーとなります。
情報の送信を1回だけで完結させ、追記などをさせたくない場合のプログラム作成に適しています。
ユーザー情報等のファイル作成にむいているかもしれませんね。

実行結果です。

fopen05

エラーが発生してしまいました。これは同じフォルダ内に第一引数に設定したファイル名、今回で言えば「test.txt」が存在する為に発生しました。「text.txt」を削除してから再度プログラムを実行してみます。

fopen02

「test.txt」が新たに作成され、ファイル内のデータは指定した文字列が書き込まれていることが確認できました。

 

サンプルコード:モード「”c”」

モード「”c”」は書き込み用でファイルをオープンし、ファイルポインタを先頭に設定します。「”w”」のようにファイルを白紙にしたりせず、データを書き込んでいきますが、諸注意として、ファイルの先頭のデータを上書きしていく点が挙げられます。動作を確認する為にメモ帳のファイルを以下のように書き換えてみましょう。

fopen06

つづいてサンプルコードを実行します。

実行結果です。

fopen07

ファイルポインタの先頭から上書きでデータが書き換えられていきます。

 

ファイルを閉じる関数「fclose」

「fclose()」は「fopen()」によって開いたファイルを閉じる関数です。正確には「オープンされたファイルポインタをクローズする」という役割であり、この関数を使用することで、ファイルへの書き込みや読み込みをさせなくしなくします。

エッグ

シェアする

コメントを残す

メールアドレスが公開されることはありません。

コメントする