2013年7月21日

CakePHPでファイルダウンロードの仕方のメモ



下のコードでCSVファイルのダウンロードができる

環境
CakePHPのバージョンは、2.3.6。
Web(AP)サーバー:IIS7.5


  1. $download_data = ここにCSVファイルのイメージを設定しておく。

  2. $this->viewClass = "Media";
  3. $this->autoRender = false;


  4. $filename = sprintf("CSVファイル_%s.csv", date("Ymd_His"));
  5. header("Pragma: public");
  6. header("Expires: 0");
  7. header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
  8. header("Content-Type: application/force-download");
  9. header("Content-Type: application/octet-stream");
  10. header("Content-Type: application/download");
  11. header("Content-Disposition: attachment;filename=" . "\"".urlencode($filename)."\"" );
  12. header("Content-Transfer-Encoding: binary");

  13. $download_data = mb_convert_encoding($download_data, "SJIS-win", "UTF-8");
  14. echo $download_data;


3~4行目:おまじない。ページは返さないので。
7行目:ファイル名を決めています。
8~15行目:ダウンロードする為のヘッダ情報
14行目:ブラウザがIE(HTTP_USER_AGENT)の場合、ファイル名に日本語が含まれていると指定したファイル名にならないので、urlencodeする。
17行目:EXCELで開きたいCSVファイルなので、Shift-JISに変換する※1。
18行目:ブラウザに送る。

※1 別に、EXCELで外部データの取り込みでCSVファイルを読むんだったら、Shift-JISに変換する必要は無いんだが、普通の人は、ファイルをダブルクリックして開くので。そもそも一般人の中には、CSVファイルのことをエクセルファイルという人もいるし…。

0 件のコメント:

コメントを投稿