フォームから PHP で抽出条件を POST し、処理結果を CSV でダウンロードする必要がありました。
なんとなく思いついたいくつかの方法を調べてみたものの、どれもこれもややこしい内容で…
正直なところ「これを実装するなら…」という記事ばかり。
そんな中、ダメ元でトライしてみた方法でさくっとできてしまったので、メモしておきます。
まずは結論から
フォーム情報を受け取る PHP ファイルのヘッダーを CSV 出力用に整えてあげるだけでした。
…なんじゃそりゃ(笑)
以下、ヘッダーの設定情報です。
header("Content-Type: application/octet-stream");
header("Content-Transfer-Encoding: binary");
header("Content-Disposition: attachment; filename=hoge.csv");
上記のヘッダー設定以降に、POSTデータの処理とか DB 処理とかを記述して、最終的な出力が CSV として整っていれば問題ありません。
諸々の処理が完了した時点で、ファイルダウンロードダイアログが表示されます。
ヘッダー情報をコメントアウトしておけば、通常のWebページとして表示されますので、開発中はコメントアウトしておけば良いでしょう。
紆余曲折(余談)
最初に思いついたのは jQuery を利用して ajax から POST する方法でした。
レスポンスデータを適当にループ処理して、CSV を生成しよう…ということです。
…この時点でレスポンスデータが CSV なら問題ないということに気付かなかったのは減点ですね。
次に思いついたのは、POST データ処理後に一時ファイルとして CSV をサーバーへ保存し、何らかのタイミングでダウンロードさせる方法でした。
「何らか」と言っている時点でお察しです。
そもそも、POST データを処理しなければいけないという事自体に気づいたのが、「DB から取得したデータをリンクから CSV ダウンロードする」という処理の実装後でした。
そこから、ふと「送信先をこれにしたらどうなるんだ…?」と思い、トライしてみたらできてしまった…ということになります。
入門書に書かれている内容かもしれませんが、個人的にはかなり悩んだ処理でしたので、誰かの助けになれば幸いです。