PHP入門 | テキストファイルの利用 | fgetsを使ってファイルを読み込む
まずはfopenを使った「ファイル読み込み」から見ていこう。ここではdata.txtの内容をfopenで読み込み、表示してみる。やろうとしていることは、これまでと大きく変わらない。
以下のサンプルコードを見てみよう。
<?php
$f = @fopen("data.txt",'r') or exit("BREAK");
$result = '';
while(!feof($f)){
$result .= fgets($f,10);
}
fclose($f);
?>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>sample page</title>
</head>
<body>
<h1>Hello PHP!</h1>
<p><?php echo $result; ?></p>
</body>
</html>
fopenでファイルを開き、fcloseで閉じることは前に説明した通りである。この例ではfopenで「エラー時の処理」も行っている。ここで使われているexitは「処理を終了する」ためのものだ。つまり、ここで処理を中断し、引数のテキストであるBREAKを画面に出力して終了する。
ファイルのデータを読み込む処理にはfgetsという関数を使う。これは次のように呼び出す。
$変数 = fgets(ファイルポインタ);
$変数 = fgets(ファイルポインタ, バイト数);
引数には読み込むファイルポインタを指定する。2番目の引数がなければ1行だけ読み込む。2番目の引数に整数を指定すると、そのバイト数だけ読み込む。
このfgetsは「読み込み位置」の情報を保持している。あるファイルから100バイトを読み込むと、その分のデータを読み込み、その位置へ「読み込み位置」を移動させる。さらにfgetsを呼び出すと、100バイト分移動した読み込み位置から再び続けて読み込む。このようにfgetsを何度も呼び出すことで、大きなファイルでも先頭から少しずつ読み進められる。
また、ファイルを読み込むときには「どこでファイルの終わりになるか」もチェックしなければならない。これにはfeofという関数を使う。引数にファイルポインタを指定して呼び出すと、ファイルの読み込み位置がファイル末尾に達していればtrue、まだ残っていればfalseを返す。サンプルコードを見ると、次のようになっている。
while(!feof($f)){......
このように繰り返しを行っている。変数名の前にある!は「否定」の記号である。真偽値(true/false)がtrueならfalse、falseならtrueというように反対の値を返す演算子だ。これにより、feof($f)がfalseの間、つまりまだ読み込むデータが残っている間は繰り返しを続ける。