- ベストアンサー
PHP 検索結果のCSVダウンロード
PHPを使用しています。 管理画面で検索結果を「ダウンロード」ボタン押下で CSV出力させたいのですが、 一度表示させた「検索結果」のみを後からCSV出力させるロジックが不明で困っております。 例えば、ボタン押下で入力フォームの内容でもう一度DBを検索させる? などが 考えられるのですが・・・
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>検索されるの度にファイルだけは作成しておく >ということでしょうか? まぁ好きなようにしてくださいとしか言いようがないですが 私の触る機会があるシステムでは大きく2つロジックの違うものがあります (1)都度作成 ダウンロードボタンおす→検索する→結果をダイレクトにテキスト出力する これが前回提示した方法 メリットとしては、必要なデータが最短時間で入手できること デメリットは重い処理になると同期処理なのでタイムアウトしてしまうこと (2)作成依頼してゲット 作成ボタンをおす→作成されたデータが一定時間プールされる→ダウンロード ボタンをおす→データがダウンロード&ダウンロードされたフラグを付ける →一定時間が経過したら削除 メリットは非同期処理のためとりあえず放置しておけること、データの再取得にも むだなSQLを走らせる必要がありません デメリットは運用方法によってはプールしておくデータが放置されっぱなしになる 可能性が高いこと 業務で使うなら(2)の方がいいでしょうけど、私が個人で作るときは手っ取り早い (1)を使うケースの方が圧倒的におおいです
その他の回答 (2)
- superside0
- ベストアンサー率64% (461/711)
方法1 ・検索結果をHTML表示するときに、テンポラリディレクトリにCSVをユニークなファイル名.csvで作る そのHTML中にテンポラリディレクトリの.csvファイルのリンクを設置しておく ・テンポラリのCSVファイルは別プロセスで掃除する (cronまたはCSV生成時用PHP内で、1時間以上経過したファイルを探して消す等) 方法2 ・検索結果のHTML中にCSVのダウンロードボタンを設置し、そのformにhiddenで検索条件を埋めておく ・CVSダウンロードのPHPでは、再度検索し(この時点ではヘッダはまだ出さない)、 成功すれば、CSV用のヘッダとCSV形式のデータを送出。 検索失敗時は、HTML用のヘッダとエラーメッセージのHTMLを送出 ですかね。
お礼
ご回答ありがとうございました。 サーバに検索結果をファイルで持たせるように致します。
- yambejp
- ベストアンサー率51% (3827/7415)
>もう一度DBを検索させる? 「もう一度」の前段階になにをやっているのかがわかりません。 一度画面上にCSVで出力するのに過不足ないデータを表示するということですか? SQLの場合、キャッシュも期待できるので、一度検索した内容であれば 再検索しても相応のスピードが期待できますね。 ロジックはたんじゅんに以下の流れになるでしょう。 (1)ボタンを押したという情報を得る(ボタンにnameをつけておくなど)→ (2)データ検索する→ (3)ヘッダを吐く→ (4)データを吐く
補足
(4)データを吐く =>この時点で、実際に「ダウンロード」ボタン押下されるかは 分からないのですが、検索されるの度にファイルだけは作成しておく ということでしょうか? 検索=>ファイルはとりあえず作成=>「ダウンロード」ボタン押下しない場合もある
お礼
ご回答ありがとうございました。 サーバに検索結果をファイルで持たせるように致します。
補足
ご回答ありがとうございます。 >ダウンロードボタンおす→検索する→結果をダイレクトにテキスト出力する これをやりたいのですが、そもそも 「検索する」のときに検索条件をどう設定するのか? で困ってます。 ソースの構成は下記です。 --------------------------- ・コントローラのPHP --検索ボタン押下時の処理 -> 検索用入力フォームVIEWで検索条件を入力 -> 検索結果表示用VIEWで結果表示 --CSV出力押下時の処理 --------------------------- 最初にフォームに値を入力して検索し、結果を得ても CSV押下時には、フォームに入れた項目は、 検索条件に設定できないのではないかと。。