PHP file_get_contensとfopenの比較
CSVファイルを取り扱うにはfile_get_contensとfopenのどっちがいいのだろうか?
今までなら何も考えずにfile_get_contens()で1行ずつ分解して・・・ってやり方をしていた。
fopen()だとメモリを喰わないって話を聞き調べてみた。
ソースと結果は以下。
file_get_contents
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
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
結果
fopen()は「メモリを使わない・遅い」