PHP で大容量ファイルを一行ずつ読み込む方法

  1. PHP で大容量ファイルを一行ずつ読み込むには fgets() 関数を使う
  2. PHP で大容量ファイルを一行ずつ読み込むには file() 関数を使う
  3. stream_get_line() 関数を使って PHP で大容量ファイルを一行ずつ読み込む

この記事では、PHP で大容量ファイルを一行ずつ読み込む方法を紹介します。

  • fgets() 関数を使う
  • file() 関数を使う
  • stream_get_line() 関数を使う

PHP で大容量ファイルを一行ずつ読み込むには fgets() 関数を使う

組み込み関数 fgets() は、開いているファイルから一行ずつ読み込んでくれる。この関数を使って、大きなファイルを一行ずつ読み込むことができます。この関数を使用するための正しい構文は以下の通りです。

fgets($fileName, $lengthOfFile);

関数 fgets() は 2つのパラメータを持つ。パラメータの詳細は以下の通りである。

パラメータ 説明
$fileName 強制的 1 行ずつ読み込んでいきたいファイルです。
$lengthOfFile オプション 読み込むファイルの長さを指定します。デフォルト値は 1024 バイトである。

この関数は正常ならば、ユーザが指定したファイルから lengthOfFile -1string を返す。失敗した場合は FALSE を返す。

以下のプログラムは、fgets() 関数を用いて大容量ファイルを 1 行ずつ読み込む方法を示している。ここでは、fopen()fclose() 関数を用いて、それぞれファイルを開き、閉じることにする。花の詳細が書かれた flowers.txt という名前のテキストファイルがあります。

<?php 
if ($file = fopen("flowers.txt", "r")) {
    while(!feof($file)) {
        $line = fgets($file);
       echo ("$line");
    }
    fclose($file);
}   
?> 

このファイルを最後まで読み込むには、feof() 関数を利用しています。出力は、ファイルを一行ずつ読み込んだ内容を示しています。

出力:

PHP で大容量ファイルを一行ずつ読み込む fgets 関数

PHP で大容量ファイルを一行ずつ読み込むには file() 関数を使う

PHP では、file() 関数を使ってファイルを一行ずつ読み込むこともできます。関数 file() はファイルを一行ずつ配列に読み込みます。この関数を使用するための正しい構文は以下の通りです。

file($fileName, $flags, $context)

関数 file() は 3つのパラメータを受け付ける。パラメータの詳細は以下の通りである。

パラメータ 説明
$fileName 強制的 これはファイルが保存されているパスです。
$flags オプション この関数のフラグとして使用できる定数について書かれています。これを読むにはここを参照してください。
$context オプション stream_context_create()関数を使って作成できるリソースです。

そのファイルを file() 関数を使って読み込むプログラムは以下のようになります。

<?php 
foreach(file('flowers.txt') as $line) {
   echo $line. "\n";
} 
?> 

stream_get_line() 関数を使って PHP で大容量ファイルを一行ずつ読み込む

また、ファイルを一行ずつ読み込むには、stream_get_line() 関数を使うこともできます。この関数はデリミタまでのファイルを読み込みます。この関数を使用するための正しい構文は以下の通りです。

stream_get_line($handle, $length, $ending)

関数 stream_get_line() は 3つのパラメータを受け付けます。パラメータの詳細は以下の通りです。

パラメータ 説明
$handle 強制的 これはファイルが保存されているパスです。
$length 強制的 読み込まれるファイルの長さを伝える。
$ending 強制的 これはデリミタを表す文字列です。

関数 stream_get_line() を用いてファイルを読み込むプログラムは以下の通りです。

<?php 
$file = fopen("flowers.txt", "r+");
while ($line = stream_get_line($file, 1024 * 1024, ".")) {
  echo $line;
}
fclose($file);
?> 

出力:

stream_get_line PHP で大きなファイルを一行ずつ読み込む関数

注意

区切り文字 . は出力から削除されます。

関連記事 - PHP File

  • PHP でファイル拡張子を取得する方法
  • comments powered by Disqus