PHP file_get_contensとfopenの比較

2015/02/27

CSVファイルを取り扱うにはfile_get_contensとfopenのどっちがいいのだろうか?

今までなら何も考えずにfile_get_contens()で1行ずつ分解して・・・ってやり方をしていた。
fopen()だとメモリを喰わないって話を聞き調べてみた。

ソースと結果は以下。

file_get_contents

$sTime = microtime(true);
echo “MEMORY – fst ” . number_format(memory_get_usage()) . ” byte” . “\n”;

$fileName = “○○○.csv”;
$fileData = file_get_contents($fileName);
$lineAry = explode(“\n”, $fileData);
foreach($lineAry as $rowLine) {
   //echo $rowLine;
}
echo “MEMORY – end ” . number_format(memory_get_usage()) . ” byte” . “\n”;
echo bcsub(microtime(true), $sTime, 4) . “\n”;

// ▼結果
// MEMORY – fst 352,120 byte
// MEMORY – end 2,083,832 byte
// 0.0043

fopen

$sTime = microtime(true);
echo “MEMORY – fst ” . number_format(memory_get_usage()) . ” byte” . “\n”;

$fileName = “○○○.csv”;
$file_handle = fopen($fileName, “r”);
while (!feof($file_handle)) {
   $line = fgets($file_handle);
   //echo $line;
}
echo “MEMORY – end ” . number_format(memory_get_usage()) . ” byte” . “\n”;
fclose($file_handle);
echo bcsub(microtime(true), $sTime, 4) . “\n”;

// ▼結果
// MEMORY – fst 352,312 byte
// MEMORY – end 361,184 byte
// 0.0203

結果

file_get_contents()は「メモリを使う・速い」
fopen()は「メモリを使わない・遅い」

新着(ニュース関連以外)

2018-05-16
PHPで画像のヘッダ情報(?)の「Orientation」を元に画像回転させたい。
2018-03-05
Android Studioをインストール。エミュレータを軽くするトコまで終わらせたかったけど、挫折した。
2018-02-23
プッシュ通知について調べてた時にでてきたServiceWorker。そのServiceWorkerについてのメモ。
2017-12-13
jqueryで取得したDOM要素をオブジェクトじゃなくて、配列で受け取りたい
2017-11-30
Xampp+FuelPHP1.8をサーバーにupしたらエラーになった。