###現状のコード
PHP
1// 改行コードをPHP_EOLからCR+LFに置換するフィルタ 2class eol_filter extends \php_user_filter { 3 function filter($in, $out, &$consumed, $closing) { 4 while ($bucket = stream_bucket_make_writeable($in)) { 5 $bucket->data = str_replace(PHP_EOL, "\r\n", $bucket->data); 6 $consumed += $bucket->datalen; 7 stream_bucket_append($out, $bucket); 8 } 9 return PSFS_PASS_ON; 10 } 11} 12 13// 文字コードをUTF-8からShift-JISに置換するフィルタ 14class encode_filter extends \php_user_filter { 15 function filter($in, $out, &$consumed, $closing) { 16 while ($bucket = stream_bucket_make_writeable($in)) { 17 $bucket->data = mb_convert_encoding($bucket->data, 'SJIS-win', 'UTF-8'); 18 $consumed += $bucket->datalen; 19 stream_bucket_append($out, $bucket); 20 } 21 return PSFS_PASS_ON; 22 } 23} 24 25class DbackordersController extends AppController 26{ 27 28public function export(){ 29 $this->autoRender = false; 30 $results = $this->Dbackorders->find()->toArray(); 31 32 // フィルタを登録 33 stream_filter_register("eolFilter", "eol_filter"); 34 stream_filter_register("encodeFilter", "encode_filter"); 35 36 $fp = fopen('php://output', 'w'); 37 38 // フィルタを開いたストリームに付加する 39 stream_filter_append($fp, "eolFilter"); 40 stream_filter_append($fp, "encodeFilter"); 41 42 // ダウンロードさせる 43 header('Content-Type: text/csv'); 44 header('Content-Disposition: attachment; filename="hoge.csv"'); 45 46 // 検索結果を書き込む 47 48 foreach ($results as $data ) { 49 fputcsv($fp, $data); 50 } 51 52 fclose($fp); 53 } 54}
###エラーメッセージ
Warning (2): stream_filter_append(): user-filter "eolFilter" requires class "eol_filter", but that class is not defined [APP/Controller/DbackordersController.php, line 333] Warning (2): stream_filter_append() [<a href='http://php.net/function.stream-filter-append'>function.stream-filter-append</a>]: unable to create or locate filter "eolFilter" [APP/Controller/DbackordersController.php, line 333] Warning (2): stream_filter_append() [<a href='http://php.net/function.stream-filter-append'>function.stream-filter-append</a>]: user-filter "encodeFilter" requires class "encode_filter", but that class is not defined [APP/Controller/DbackordersController.php, line 334] Warning (2): stream_filter_append() [<a href='http://php.net/function.stream-filter-append'>function.stream-filter-append</a>]: unable to create or locate filter "encodeFilter" [APP/Controller/DbackordersController.php, line 334] Warning (2): Cannot modify header information - headers already sent by (output started at /Users/shintarokaminaga/Sites/azmap/vendor/cakephp/cakephp/src/Error/Debugger.php:754) [APP/Controller/DbackordersController.php, line 337] Warning (2): Cannot modify header information - headers already sent by (output started at /Users/shintarokaminaga/Sites/azmap/vendor/cakephp/cakephp/src/Error/Debugger.php:754) [APP/Controller/DbackordersController.php, line 338] Warning (2): fputcsv() expects parameter 2 to be array, object given [APP/Controller/DbackordersController.php, line 343]
###実現したいこと
/dbackorders/export
に遷移したときにCSVをダウンロードしたいです。
###できていないこと
クラスが認識されません。
###参考サイト
https://teratail.com/questions/21711
http://qiita.com/shigejun/items/0c2a8110422ffd0e119d
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/03 15:15