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()は「メモリを使わない・遅い」

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

2017-11-09
PCでプッシュ通知ってのをしたい。
2017-11-06
PHPのバージョンを上げたらwikiが壊れたっぽい。
2017-08-03
formのinputでmaxlengthを使うとFirefoxでバグってた。他のブラウザでも気づかずにバグってたかもしれない。
2017-07-19
折れ線グラフをもう少しゆるやかに・・・というか何というか・・・調べていくと「移動平均」っていう言葉にたどり着いた
2017-07-10
FuelPHPの1.8をダウンロードして使っていたらセッションが使えないということに気付いた。