PHPプログラミング

最終更新日:
公開日:

レシピ

ファイル / ディレクトリ

ファイルから1行ずつデータを読み込む

fgets関数を使ってファイルのデータを1行ずつ取得する方法について解説します。

この記事のポイント

  • fgets関数を実行するとファイルポインターが1行進む
  • 対象ファイルが読み取り可能である必要がある

目次

ファイルのデータを1行ずつ取得する

fgets関数を使います。
こちらの関数はfopen関数であらかじめファイルを開いた状態で使用する関数です。

コード例

fgets($file_handle);

$file_handleにはファイルポインターリソースが入っている必要があり、fopen関数から取得したものを渡すことでファイルデータを取得することができます。

使用例

ファイルの読み込みには対象ファイルが読み取りを許可している必要があります。
そこで、is_readable関数を使ってファイルを読み取れるか確認した上で、ファイルデータの読み込みを実行するコードを紹介します。

コード例

// ファイルへのパス
$path = './test.txt';

// ファイルが読み取れるか確認
if( is_readable($path) ) {

	// ファイルを開く
	$file_handle = fopen( $path, 'r');

	// ファイルから1行ずつデータを取得する
	while( $data = fgets($file_handle) ) {
		echo nl2br($data);
	}

	// ファイルを閉じる
	fclose( $file_handle);

} else {
	echo 'ファイルの読み込み権限がありません。';
}

is_readable関数で対象ファイルのパーミッションを確認し、読み取り可能な場合のみファイルアクセスを試みます。

fgets関数は、ファイルポインターの位置を基準にデータの読み取りを行いますが、fopen関数の第2パラメータに「r」を渡してファイルを開くとファイルポインターは先頭にセットされます。

続いてwhile文の中でfgets関数を実行し、データを1行文のみ取得します。
これをnl2br関数で改行を有効にした上で出力しています。

fgets関数を実行するとファイルポインターは次の行に移動します。
そこで、こちらの関数をwhile文のループで繰り返していくと、ループ毎にファイルポインターが1行ずつ進められていきます。

ファイルの終端までくるとfgets関数でデータが取得できなくなってfalseが返ってくるため、そこでwhile文のループが終了するという流れになります。

以上、ファイルから1行ずつデータを読み込む方法でした。