【PHP入門2021】ファイルを読み込み全行を配列に格納する関数fileの使い方

PHP

file関数の基本構文

ファイル全体を読み込み、1行ごとの配列に変換します。

一気にメモリ内に全行格納するため、行数が多い場合の処理は高速ですがメモリ消費が大きくなる可能性があります。

複数人が任意のタイミングで同時に書き込むようなファイルの読み込み処理の場合は読み込み時に書かれてしまい、破損したファイルを読み込む可能性があるのでfileの使用は避けた方がよいでしょう。

読み込み中は書かせない等のロックをかける必要があるのでfgetsなどを使って自分で開閉(fopen/fclose)とロック管理(flock)した方がよいです。

file ( string $filename , int $flags = 0 , resource $context = ? ) : array

パラメータ

名前 初期値 説明
string $filename ファイルの名前やパス。https://などのスキームから始まるURLも入力できる。
int $flags 0 以下のフラグを組み合わせて使います。
FILE_USE_INCLUDE_PATH→PHP設定値include_path のファイルを検索
FILE_IGNORE_NEW_LINES→配列内の最後の改行を省略
FILE_SKIP_EMPTY_LINES→空行をスキップ
resource $context

返り値(戻り値)

説明
array すべての行を1要素とした配列を返す。失敗時はfalse。改行は取り除かれてないので注意。

ファイルが存在しないとE_WARNING を発生させる

file関数の使い方

ファイルから一気に全行配列に格納するサンプルソースコード

//=======================================================
// ファイルから一気に全行配列に格納し表示するサンプル
//=======================================================

$read_file = 'input/line-100.csv'; //読み込みファイル

$lines = file($read_file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); //空行無視、改行取り除く

print_r($lines);

関連するファイルシステム関数

ファイル入出力関数の特徴まとめ

関数 利用シーン 機能 処理単位 ハンドル
の管理
ロック 速度 メモリ節約 安全性 エラー時
fgetc 1文字ずつ処理する 読み 1文字ずつ 別途 別途 × △自前 終端でfalse
fgets 1行ずつ処理する 読み 1行ずつ 別途 別途 △自前 終端かエラー
でfalse
fread 固定バイトごとに
処理する
読み 指定バイト 別途 別途 ○一括
×分割
×一括
○分割
△自前 エラーでfalse
fgetcsv CSVファイルを
1行ずつ読み込む
読み 1行ずつ 別途 別途 × △自前 エラーで0かnull
file ロック不要のファイル
を行ごとに高速処理
&同時アクセスが少ない
読み データ全部 不要 ロックなし × × エラーでfalseや
E_WARNING
file_get_contents ロック不要のファイル
の文字列全体を高速取得
&同時アクセスが少ない
読み データ全部 不要 ロックなし × × エラーでfalseや
E_WARNING
fwrite
fputs
ハンドル利用時の
書込処理全般
書き 指定バイト 別途 別途 ○一括
×分割
×一括
○分割
△自前 エラーでfalse
fputcsv CSVを1行ずつ書込時 書き 1行ずつ 別途 別途 × △自前 エラーでfalse
file_put_contents 1~数回だけ書込する時。
繰り返しは非常に遅い。
書き データ全部 不要 ロック指定可能 ○一括
×分割
×一括
○分割
△フラグ指定 エラーでfalse

ファイルシステム関数一覧

fopen

fclose

flock

feof

fgetc

fgets

fread

fwrite/fputs

fgetcsv

fputcsv

file

file_get_contents

file_put_contents

コメント

タイトルとURLをコピーしました