2

10 ~ 20 MB の CSV ファイルを 1 行ずつ読み取る必要があります。file()は役に立たないので、最も速い方法を見つけなければなりません。

で試してみましfgets()たが、問題なく動作しますが、呼び出すたびに小さなブロックを読み取るのか、大きなブロックをキャッシュしてファイル I/O を最適化するのかわかりません。fread()自分で EOL を解析する方法を試す必要がありますか?

4

4 に答える 4

7

可能であれば fgetcsv()を使用する必要があります。

それ以外の場合は、常に fgets() があります。

于 2008-11-05T13:23:16.543 に答える
2

大きなファイルの場合、stream_get_line は明らかに fgets よりも効率的です。読み取りに適切な最大長を指定すると、心配しているように見えるので、PHPが行を読み取るために「先読み」する必要がある理由はわかりません。

CSV を使用する場合、fgetcsv は結果をもう少し適切な形式で返します。

于 2008-11-05T15:10:59.493 に答える
1

fgets()あなたのニーズには完全に問題ないはずです。大丈夫なはずです-これを同時に何度もfile()実行しない限り、20MBはそれほど大きくありません。

fgets()2 番目のパラメーターで調整できることを忘れないでください。

于 2008-11-05T13:21:27.280 に答える
0

をご覧くださいfgetcsv()。コンマ区切りの行が自動的に配列に解析されます。

実行効率に関しては、私にはわかりません。できれば後で処理する予定のサイズのファイルを使用して、簡単なテストを実行する必要があります。しかし、fget ??? そしてfput??? 関数は I/O 最適化されていませんでした。

于 2008-11-05T13:28:03.897 に答える