PHP入門 ファイルシステム関数 タブ区切りテキストの読み込み(fgets/file関数)

fgets関数

fgets関数は、指定されたファイルから1行分のデータを読み込みます。fgetcsv関数と異なるのは、読み込んだデータの分割処理を行わないという点だけです。この場合は、読み込んだ行データをexplode関数で分割処理する必要があります。タブ区切りテキストを読み込む場合にはfgetcsv巻子うのほうが便利ですが、特定の宇切り文字を持たないテキストを順に読み込む場合にはfgets関数がよいでしょう。

構文:fgets関数

fgets(resource $handle [, int $length]):string|false
$handleファイルハンドル
$length読み込む最大長(バイト単位)

file関数

file関数は指定されたファイルをまとめて読み込み、行単位に格納した配列を返します。

構文:file関数

file(string $filename [, int $flags]):array
$filename読み込むファイルのパス
$flags動作フラグ

file関数は、ファイルの内容をまとめて取得したいときに便利です。ただし、巨大なテキストが相手の場合、メモリも大量に消費します。テキストの内容を順に処理(出力)するケースでは、できるだけfgets/fgetcsv関数を優先します。

引数$flagsで利用できる値には次のようなものがあります。また「FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES」のように、複数のフラグを連結することもできます。

引数$flagsの設定値

設定値概要
FILE_USE_INCLUDE_PATHinclude_pathパラメーターからファイルを検索
FILE_IGNORE_NEW_LINES配列の要素末尾に改行文字を追加しない
FILE_SKIP_EMPTY_LINES空行を読み飛ばす
<?php
$file = file('access.log', FILE_IGNORE_NEW_LINES);
//配列に格納された行を順に処理
foreach ($file as $fline) {
  // タブ文字で行単位のテキストを分割
  $line = explode("\t", $fline); 
  print '<tr>';
  // 分割した結果を順に出力
  foreach ($line as $value) {
    print '<td>' . $value . '</td>';
  }
  print '</tr>';
}

構文:file_get_contents関数

file_get_contents(string $filename):string|false

ファイル内容を文字列にまとめて読み込みたい場合は、file_get_contents関数も利用できます。

$filename読み込むファイルのパス