巨大なSJISのCSVファイルをfgetcsv関数で処理する

久々にcsv扱って、検索したら懐かしい記事を自分のevernoteから拾ってきました(笑)

さて、前回記事「PHPでメモリ上に一時ファイルを作る」では、file_get_contents関数でCSVファイル全体を取得して文字エンコーディングの変換を行い、変換結果に対してfgetcsv関数を利用しました。しかし、CSVファイルが巨大な場合にはfile_get_contentsを使うとメモリ上限に引っかかってPHPが停止してしまいます。

引用元: 巨大なSJISのCSVファイルをfgetcsv関数で処理する – hnwの日記.

今更Shift-JisのCSVを読み込む機会もないだろ、と思いましたが、ストリームフィルタ自体はなかなか便利そうなので、メモさせて頂きます。

引用記事ではfopenで作成したストリームに、Stream_Filter_Mbstringという、文字エンコーディング変換を行うストリームフィルタを作って適用する、ということをされてます。素敵ですね。