概要
Standard PHP LibraryのSplFileObject
を使ったテキストファイルの読み込みについて整理する。
- ファイル名を指定して
SplFileObject
のインスタンスを生成$file = new \SplFileObject('textファイルパス');
$open_mode
はデフォルト値の'r'
(読み込み)
- テキスト読み込みのためのフラグをセット
$file.setFlags(...);
- ファイルを読み込み
foreach
で行単位データを取得
なお、Splは”Standard PHP Library”の略。
基本例
例として、GETリクエストに応じて所定の場所に配置されたテキストファイルを読みだし、その内容を行データを要素とする配列に格納し、dd()
で表示させてみる。
CSVファイルの配置
storage/app/
ディレクトリーにテキストファイルを配置した場合は、storage_path()
関数にstorage
ディレクトリーを基準としたパスを指定してフルパスを得ることができる。
たとえば以下の内容のファイルをstorage/app/text_sample_utf8.csv
として配置する(エンコーディングはUTF-8)。
1 2 3 4 5 6 7 8 9 |
The rain in Spain stays mainly in the plain. スペインの雨は主に広野に振る。 In Hartford, Hereford and Hampshire Hurricanes hardly ever happen. ハートフォード、ヘレフォードとハンプシャーでは ハリケーンはめったに起こらない。 |
コントローラー
テキストファイルを読み込み、その内容を配列に保存してdd()
で表示するアクションは以下のとおり。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public function textRead(Request $request) { $file = new \SplFileObject(storage_path('app/text_sample_utf8.txt')); $file->setFlags(\SplFileObject::READ_AHEAD | \SplFileObject::DROP_NEW_LINE); $lines = []; foreach ($file as $line) { $lines[] = $line; } dd($lines); ..... } |
dd()
の表示結果は以下の通り。
1 2 3 4 5 6 7 8 9 10 11 12 |
rray:10 [▼ 0 => "The rain in Spain stays mainly in the plain." 1 => "" 2 => "スペインの雨は主に広野に降る。" 3 => "" 4 => "In Hartford, Hereford and Hampshire" 5 => "Hurricanes hardly ever happen." 6 => "" 7 => "ハートフォード、ヘレフォードとハンプシャーでは" 8 => "ハリケーンはめったに起こらない。" 9 => "" ] |
フラグ
空行を読み飛ばしたい場合は、READ_AHEAD
、SKIP_EMPTY
、DROP_NEW_LINE
の3つを設定する。空行を空の文字列として確保したい場合は最後の空行の要不要をによって、不要ならデータを削除する。
詳細はこちらを参照。