この記事は 2015年3月22日 に開催された Symfony Meetup #2 で LT した内容を整理したものです。発表資料の公開も考えましたが、ソースコードがそれなりにでてくるのでブログで整理して公開することにしました。 Symfony2 で CSV ダウンロードといえば twig を使うのが一般的(?)ですが、この方法は CSV の件数が多い場合すぐにメモリ上限に達してしまいます。メモリ使用量を抑え、大容量の CSV にも耐えられる Symfony 流のダウンロード方法を模索してみました。 動作確認環境 PHP5.6MySQL5.6Symfony2.6 目次 Twig による CSV ダウンロードはメモリオーバーしてしまう 素の PHP の場合 StreamedResponse と Query::iterate() を使う バッファクエリと非バッファクエリ Symfony を非バ
ダウンロードためにCSVを作る場合、implode()などを使って、変数上でCSVを作成する方法では、値内のダブルコートや改行のエスケープが面倒なためfputcsv()を使うと良い。 参考:PHPでCSVを生成する 現実的な方法として、一旦メモリ上にCSVを作成してから出力する方法とCSV形式を都度出力する方法がある。 一旦メモリ上にCSVを作成してから出力 都度で出力に比べ一旦作ることで、Content-lengthを出力することができるので、ブラウザの「ダウンロード残り時間」を表示できる。 一旦ファイルにCSVを作成してからreadfileで出力する方法は、ディスクIOが大きくパフォーマンスに問題があるので、一旦作るならメモリ上に作成するのが良い。 PHPでの書きかた //メモリ上に領域確保 $fp = fopen('php://temp/maxmemory:'.(5*1024*102
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く