libro
www.tuyano.com
初心者のためのPHPプログラミング入門

テキストファイルの利用 (5/7)

作成:2010-12-05 14:32
更新:2010-12-05 14:59

■fgetsによるファイルの読み込み

では、まずfopenを使った「ファイルの読み込み」から行ってみましょう。ここでは、data.txtの中身を、fopen利用で読み込み表示してみます。まぁ、やっていることは今までと変りないのですが……。

下にサンプルコードを掲載しておきます。fopenでファイルを開き、fcloseで閉じるのは、この前に説明した通りです。fopenでは、例によって「エラー時の処理」もしてあります。ここでは「exit」というものが使われていますが、これは「処理を終える」ためのものです。つまり、ここで強制終了し、引数のテキストを出力しておしまいにしています。

ファイルのデータを読み込む処理は、「fgets」という関数を使います。これは、
$変数 = fgets( ファイルポインタ );
$変数 = fgets( ファイルポインタ , バイト数 );
このような形で呼び出します。引数には、読み込むファイルポインタを指定します。2番目の引数がないと、改行までを読み込みます。2番目の引数に整数を指定すると、そのバイト数だけ読み込みます。

このfgetsは、「読み込み位置」の情報を保持しています。あるファイルから100バイト読み込むと、それだけのデータを読み込み、その場所に「読み込み位置」を移動させるのです。またfgetsを呼び出すと、100バイト分移動した読み込み位置から、また続きを読み込む、というわけです。こうしてfgetsを何度も呼び出すことで、大きなファイルも冒頭からすこしずつ読み込んでいくことができます。

また、ファイルの読み込みを行う場合、「どこでファイルが終わりになるか」もチェックしないといけません。これは「feof」という関数を使います。引数にファイルポインタを設定して呼び出すと、ファイルの読み込み位置がファイルの終わりまできていたらtrue、まだ残っていたらfalseを返します。サンプルコードを見ると、
while(!feof($f)){……
こんな形で繰り返しを行っていますね? 変数名の前にある「!」は、「否定」の記号です。真偽値(true/falseの値)がtrueならfalsefalseならtrueというように、逆の値を返す演算子です。これで、feof($f)falseの間(つまりまだ残っている)繰り返しを続けるようにしているわけです。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

<?php
	
	$f = @fopen("data.txt",'r') or exit("BREAK");
	$result = '';
	while(!feof($f)){
		$result .= fgets($f,10);
	}
	fclose($f);
?>
<!DOCTYPE html
	PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"
		xml:lang="ja" lang="ja"> 
	<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>
※関連コンテンツ

「初心者のためのPHPプログラミング入門」に戻る