php ファイルの内容を全て表示できる「file」と「file_get_contents」と「fgets」のパフォーマンスを計測する
phpで、ファイルの内容を全て表示できる「file」と「file_get_contents」と「fgets」のパフォーマンスを計測するサンプルコードを記述してます。phpのバージョンは8.0です。
環境
- OS CentOS Stream release 8
- php 8.0.0
- nginx 1.14.1
実行時間計測
microtimeを使用すれば、処理にかかった時間を計測することが可能です。
$startTime = microtime(true);
// 処理を記述
$time = microtime(true) - $startTime; // 処理にかかった時間(ミリ秒)
以下は、「file」と「file_get_contents」と「fgets」を使用して、hoge.txtに記述された全ての内容を取得するコード100万回実行して、パフォーマンスを計測するサンプルコードとなります。
<?php
// 100万回実行
define('COUNT', 1000000);
// 計測開始
$startTime = microtime(true);
for ($i = 0; $i < COUNT; ++$i) {
$data1 = file("hoge.txt");
foreach ($data1 as $key => $value) {
}
}
result($startTime, 'file');
// 計測開始
$startTime = microtime(true);
for ($i = 0; $i < COUNT; ++$i) {
$data2 = file_get_contents("hoge.txt");
}
result($startTime, 'file_get_contents');
// 計測開始
$startTime = microtime(true);
for ($i = 0; $i < COUNT; ++$i) {
$fp = fopen("hoge.txt", 'r'); // rは読み込みモード
while (!feof($fp)) { //ファイルポインタがEOF(End Of File)にいるかを判定
fgets($fp); // 1行ずつ読み込み
}
fclose($fp);
}
result($startTime, 'fgets');
function result($time, $str)
{
echo '測定結果 : ' . $str . PHP_EOL;
// 表示は少数第5桁まで
echo "process time: " . number_format((microtime(true) - $time), 5) . ' ミリ秒' . PHP_EOL;
echo PHP_EOL;
}
実行結果
[1回目]
測定結果 : file
process time: 9.53313 ミリ秒
測定結果 : file_get_contents
process time: 8.93494 ミリ秒
測定結果 : fgets
process time: 10.85059 ミリ秒
[2回目]
測定結果 : file
process time: 9.46048 ミリ秒
測定結果 : file_get_contents
process time: 8.88595 ミリ秒
測定結果 : fgets
process time: 10.88762 ミリ秒
[3回目]
測定結果 : file
process time: 9.39323 ミリ秒
測定結果 : file_get_contents
process time: 8.85138 ミリ秒
測定結果 : fgets
process time: 10.81306 ミリ秒
実行した結果を見る限り、「file_get_contents」がパフォーマンスは良さそうです。
-
前の記事
MySQL クエリ結果をテーブル形式でファイルに出力する 2021.12.17
-
次の記事
Linux 空白を改行に変換する 2021.12.17
コメントを書く