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_PATH | include_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 | 読み込むファイルのパス |