超ひさびさの更新です。
ダウンロードボタンを押すと、DBからCSVファイルにして出力するメモ。
単独phpでechoでもすればさほどでもないけど、ZendFremeworkで組んでいるとき、この出力phpファイルが本体とバラバラになるのを避けたかったのでフレームワーク内で組みたかった。
とはいえ、Zend_Controller_Actionだけを継承したCSV出力用の単独コントローラーをつくり、アクション内で解決する。
肝になるのはヘッダー情報の出力方法と、このコントローラーではレンダラー系を全て切って余計な出力が無いようにしておくことかな。
public function init(){} public function preDispatch(){} public function postDispatch(){}
まず、ファイル名を付けて、ダウンロードできるようにヘッダー情報を出力
$this->getResponse() ->setHeader('Content-disposition','attachment; filename="data_'.date('YmdHis').'.csv"' ) ->setHeader('Content-type', 'test/x-csv') ->sendHeaders();
そしてSQLなんかで出力用の配列を作って、CSV用に整形するループ内でコンテンツ内容を保存していく
mb_convert_variables("SJIS","EUC-JP",$csv); foreach($csv as $value){ $this->getResponse()->appendBody( implode(',',$value)."\r\n" ); } $this->getResponse()->outputBody();