php fgetsでファイルの内容を1行ずつ読み込む

  • 作成日 2020.12.17
  • php
php fgetsでファイルの内容を1行ずつ読み込む

phpで、fgetsを使用して、ファイルの内容を1行ずつ読み込むサンプルコードを記述してます。phpのバージョンは8.0です。

環境

  • OS  CentOS Stream release 8
  • php 8.0.0
  • nginx 1.14.1

fgets使い方

fgetsを使用すれば、ファイルの内容を1行ずつ読み込むことが可能です。

fgets(ファイル名);
// 読み込むデータがなければ、falseが返ります

以下は、「sample.php」を実行して「hoge.txt」ファイルの内容を1行読み込んで表示するサンプルコードとなります。

ディレクトリ構成

hoge.txt内容

sample.php

<?php

$fp = fopen("hoge.txt", 'r'); // rは読み込みモード

$data = fgets($fp);

echo $data;
// 1行目

fclose($fp);

実行結果をみると、1行目しか読み込まれていないことが確認できます。

全ての行を読み込む場合は、EOF(End Of File)まで処理を実行します。

<?php

$fp = fopen("hoge.txt", 'r'); // rは読み込みモード

while (!feof($fp)) {  //ファイルポインタがEOF(End Of File)にいるかを判定
    echo fgets($fp); // 1行ずつ読み込み
}

// 1行目
// 2行目
// 3行目

fclose($fp);

「hoge.txt」の途中に改行があっても、最後まで読み込むことが可能です。

fileとfile_get_contents

fileを使用しても同様の結果を得ることが可能です。

<?php

$data = file("hoge.txt"); // rは読み込みモード

foreach ($data as $key => $value) {
    echo $value;
}

// 1行目
// 2行目
// 3行目

file_get_contentsを使用しても同じ結果が得られます。

$data = file_get_contents("hoge.txt");
echo $data;

// 1行目
// 2行目
// 3行目

ファイルの内容を全て表示する場合は、file_get_contentsが一番パフォーマンスは良さそうです。

【参考】 ファイルの内容を全て表示するコードをそれぞれ10万回実行した結果

測定結果 : file
process time: 0.93996 ミリ秒

測定結果 : file_get_contents
process time: 0.87754 ミリ秒

測定結果 : fgets
process time: 1.08610 ミリ秒

readfile

全て表示するのであれば、readfileも使用できます。

<?php

readfile("hoge.txt");

// 1行目
// 2行目
// 3行目

fpassthru

fpassthruを使っても同じです。

<?php

$fp = fopen("hoge.txt", "r");
fpassthru($fp);

// 1行目
// 2行目
// 3行目