10 ~ 20 MB の CSV ファイルを 1 行ずつ読み取る必要があります。file()
は役に立たないので、最も速い方法を見つけなければなりません。
で試してみましfgets()
たが、問題なく動作しますが、呼び出すたびに小さなブロックを読み取るのか、大きなブロックをキャッシュしてファイル I/O を最適化するのかわかりません。fread()
自分で EOL を解析する方法を試す必要がありますか?
10 ~ 20 MB の CSV ファイルを 1 行ずつ読み取る必要があります。file()
は役に立たないので、最も速い方法を見つけなければなりません。
で試してみましfgets()
たが、問題なく動作しますが、呼び出すたびに小さなブロックを読み取るのか、大きなブロックをキャッシュしてファイル I/O を最適化するのかわかりません。fread()
自分で EOL を解析する方法を試す必要がありますか?
可能であれば fgetcsv()を使用する必要があります。
それ以外の場合は、常に fgets() があります。
大きなファイルの場合、stream_get_line は明らかに fgets よりも効率的です。読み取りに適切な最大長を指定すると、心配しているように見えるので、PHPが行を読み取るために「先読み」する必要がある理由はわかりません。
CSV を使用する場合、fgetcsv は結果をもう少し適切な形式で返します。
をご覧くださいfgetcsv()
。コンマ区切りの行が自動的に配列に解析されます。
実行効率に関しては、私にはわかりません。できれば後で処理する予定のサイズのファイルを使用して、簡単なテストを実行する必要があります。しかし、fget ??? そしてfput??? 関数は I/O 最適化されていませんでした。