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 |
コメント