ファイルデータを扱う関数たち(fopen,fgets,fwrite,fclose関数)
プログラムへ入力されるデータをキーボードだけではなく、外部ファイルからも読み込む方法。
ファイルデータを扱う流れ
ファイル操作は以下の流れで行われる(文等のfはファイルのf)。
fopen(ファイルハンドル):ファイルを開く
fgets(ファイルハンドル):ファイルから読み込み
fwrite(ファイルハンドル):書き込み
fclose(ファイルハンドル):ファイルを閉じる
※ファイルハンドルとはファイルを特定するためのIDのようなもの、はじめは「?」ってなるが、要は ”ファイルのデータ” を扱って部分のことでいつものように変数にぶっこんでから関数で処理!!
(今回のサンプル)
ファイル名:
file_write.txt
データ:
テストファイルの一行目
テストファイルの二行目
テストファイルの三行目
今回はわかりやすく、ファイルデータは、はじめに変数に代入しておくよ!
$filename = './file_write.txt';
ファイルデータを開いて読み込みたい!!
①ファイルを開くよ
使う関数:fopen();
書き方:fopen($filename,'r');
「'r'」ってなに?
これは「どのような状態でファイルを開くのか」を、モードで指定している
「r+」「w+」「a+」とか読み込みと書き込みの両方ができる便利なモードもあるけどまたの機会に。。。とりあえずfopen(ファイルデータ,'モード');で入力。
※ちなみに「r」は読み込みだけを行うのでモードです。
で、例のごとくそれを変数に代入。これしないとだめよね。
$fp = fopen($filename,'r');
②ファイルを読み込むよ
読み込む=ファイルの中身(データ)をプログラムで扱えるように取り出す
※fopenはあくまでファイルを開いた(指定)しただけ
[パターン1]
使う関数:fgets();
書き方:fgets($fp);
よしゃ!これで読み込み完了!
…ではない!これだと1行しか読み込んでいないという事実…(笑)
テストファイルの一行目 〇 読み込んだ
テストファイルの二行目 × 読み込んでいない
テストファイルの三行目 × 読み込んでいない
▼あるあるな書き方▼
ループで繰り返し処理
while( ($tmp = fgets($fp) ) !== FALSE){
$data[] = htmlspecialchars($tmp,ENT_QUOTES,'UTF-8');
}
fclose($fp); // fcloseでファイルを閉じる
ファイルを開いた時のモードが「r」なので、ファイルの1行目から読み込み(ファイルポインタが先頭にある)最後の行を読み込んだら読み込む行がないのでFALSEとなり、whileの繰り返しを終了される。
[ストック] htmlspecialcharstって長くね?どういう意味?
[ストック] ファイルポインタの移動方法
※今回は参照元サイトを習ってそれっぽく配列に代入してみましたー★!
おまけで、 $dataをforeach文で出すと
テストファイルの一行目
テストファイルの二行目
テストファイルの三行目
な感じになるよ!
[パターン2]
ファイル全体を1度に読み込んで処理する関数
使う関数:file_get_contents();
書き方:file_get_contents($filename);
これを代入して変数を表示すると全文一気に取り出してくれるみたい!
===========
参照記事(ありがとうございました!!)
===========
残りの2つは次出てきたときに書くね!
▶fwrite(ファイルハンドル):書き込み
▶fclose(ファイルハンドル):ファイルを閉じる