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行目
-
前の記事
php8.0 fgetssで「PHP Fatal error: Uncaught Error: Call to undefined function fgetss()」エラー 2020.12.17
-
次の記事
javascript 消費税込みの価格を求める 2020.12.17
コメントを書く